Linux系统调用入门:进程(execve,exit,getpid,getpgid)/文件(open,close,read,write)

Linux系统调用入门:操作系统考试常见知识点

如果你正在准备操作系统考试,Linux系统调用可能会是一个绕不过去的重点。别担心!这篇博客会用最简单的方式,带你了解什么是系统调用,以及考试中常见的几个例子,包括进程相关的(比如execveexitgetpidsetpid)和其他类型的系统调用(比如文件操作)。我们会尽量少用术语,多用生活化的比喻,帮你快速上手!


什么是系统调用?

简单来说,**系统调用(System Call)**是用户程序和操作系统内核"聊天"的方式。想象一下,你是一个普通人(用户程序),操作系统内核是"大管家",掌管着电脑的所有资源(CPU、内存、文件等)。你想干点大事(比如创建进程、读文件),但你没权限直接操作,只能通过"递申请单"给大管家,这个申请单就是系统调用。

Linux提供了几百个系统调用,但考试一般只考常见的几个。我们先从进程相关的讲起,再扩展到其他类型。


进程相关的系统调用

进程是程序运行时的"活体",就像工厂里的一个工人。操作系统考试特别喜欢考和进程相关的系统调用,因为它们是操作系统的核心概念。下面是几个常考的:

1. execve - "换个新工作"

  • 作用: 把当前进程替换成一个新程序。
  • 生活比喻 : 想象你在工厂做流水线工人,突然老板说:"你别干这个了,去开叉车吧!"于是你放下手头活,拿起叉车钥匙,开始新工作。execve就是这样,它让进程"变身",加载并运行一个新程序。
  • 用法 : int execve(const char *filename, char *const argv[], char *const envp[]);
    • filename: 新程序的文件路径。
    • argv: 传给新程序的参数(比如命令行参数)。
    • envp: 环境变量。
  • 考试Tips: 注意它不会创建新进程,而是"替换"当前进程。如果成功,原来的程序就不见了;如果失败,会返回错误。

2. exit - "下班回家"

  • 作用: 结束当前进程。
  • 生活比喻 : 你干完一天活,跟老板说:"我下班了!"然后离开工厂。exit就是进程的"告别仪式",告诉操作系统"我干完了"。
  • 用法 : void exit(int status);
    • status: 退出状态码,0通常表示成功,非0表示出错。
  • 考试Tips : 常和fork(创建进程)一起考,记住它是"彻底结束",不会返回。

3. getpid - "查身份证号"

  • 作用: 获取当前进程的ID(PID,进程标识号)。
  • 生活比喻 : 你在工厂问:"我的工号是多少?"然后拿到自己的编号。getpid就是进程查自己"身份"的方法。
  • 用法 : pid_t getpid(void);
    • 返回值是一个整数,就是进程ID。
  • 考试Tips: 简单但重要,常用来追踪"谁是谁"。没有参数,很容易记。

4. setpid - "改身份证号"?(其实没有这个)

  • 特别说明 : 你可能打错了,这里没有setpid这个系统调用!可能是想问setpgid(设置进程组ID)或者其他。考试中如果提到"设置PID"之类,通常是陷阱题,因为PID是操作系统分配的,用户不能随便改。
  • 替代选项 :
    • setpgid(pid_t pid, pid_t pgid): 设置进程的组ID。
    • 生活比喻: 相当于给工人分组,比如"你加入叉车组"。
  • 考试Tips : 如果题目提到setpid,要警惕,可能是笔误或故意挖坑。

补充:fork - "分身术"

  • 作用: 创建一个新进程(子进程)。
  • 生活比喻: 你在工厂干活,突然"分裂"出一个分身帮你干活。新进程几乎是老进程的翻版,但有自己的PID。
  • 用法 : pid_t fork(void);
    • 返回值:在父进程返回子进程PID;在子进程返回0;失败返回-1。
  • 考试Tips : 和execveexit常一起出现,理解"复制"和"替换"的区别。

其他常见的系统调用

除了进程相关,考试还会考一些文件操作或资源管理的系统调用。下面是几个代表:

1. open - "打开文件柜"

  • 作用: 打开一个文件,返回文件描述符。
  • 生活比喻: 你跟大管家说:"给我打开这个文件柜!"然后拿到一个"钥匙"(文件描述符),方便后续操作。
  • 用法 : int open(const char *pathname, int flags);
    • pathname: 文件路径。
    • flags: 打开方式(比如只读O_RDONLY,读写O_RDWR)。
  • 考试Tips : 文件描述符是个小整数,从0开始分配,常和readwrite一起考。

2. read - "读文件内容"

  • 作用: 从文件中读取数据。
  • 生活比喻 : 你用钥匙打开文件柜,拿出一叠纸读内容。read就是从文件里"取东西"。
  • 用法 : ssize_t read(int fd, void *buf, size_t count);
    • fd: 文件描述符。
    • buf: 数据存放的地方。
    • count: 想读多少字节。
  • 考试Tips: 返回值是实际读取的字节数,可能是0(文件末尾)或-1(出错)。

3. write - "写文件内容"

  • 作用: 往文件中写入数据。
  • 生活比喻 : 你往文件柜里塞一叠新纸。write就是"存东西"。
  • 用法 : ssize_t write(int fd, const void *buf, size_t count);
    • 参数和read类似,但buf是写入的数据。
  • 考试Tips : 注意它和read是对仗的,常一起出现。

4. close - "关文件柜"

  • 作用: 关闭文件描述符。
  • 生活比喻 : 用完文件柜后锁上,告诉大管家"我不用了"。close释放资源。
  • 用法 : int close(int fd);
  • 考试Tips : 用完文件别忘了close,否则资源泄漏。

小结:怎么记这些系统调用?

  • 进程相关forkexecveexitgetpid): 想象一个工人在工厂的"生命周期"------分身干活、换新工作、下班走人、查工号。
  • 文件相关openreadwriteclose): 像操作一个文件柜------打开、读写、关上。
  • 考试重点: 理解每个调用的作用和典型用法,尤其是返回值(成功/失败的标志)。
相关推荐
程序员一诺2 分钟前
【Python使用】嘿马python数据分析教程第1篇:Excel的使用,一. Excel的基本使用,二. 会员分析【附代码文档】
后端·python
神奇侠202421 分钟前
快速入手-基于Django-rest-framework的serializers序列化器(二)
后端·python·django
Asthenia041222 分钟前
基于Segment-Mybatis的:分布式系统中主键自增拦截器的逻辑分析与实现
后端
Asthenia041223 分钟前
Seata:为微服务项目的XID传播设计全局的RequestInterceptor-将XID传播与具体FeignClient行为解耦
后端
无奈何杨32 分钟前
Docker/Compose常用命令整理总结
后端
搬砖的阿wei38 分钟前
从零开始学 Flask:构建你的第一个 Web 应用
前端·后端·python·flask
草巾冒小子1 小时前
查看pip3 是否安装了Flask
后端·python·flask
放肆的驴1 小时前
EasyDBF Java读写DBF工具类(支持:深交所D-COM、上交所PROP)
java·后端
shuair2 小时前
01 - spring security自定义登录页面
java·后端·spring
失乐园2 小时前
解密万亿级消息背后:RocketMQ高吞吐量核心机制解剖
java·后端·面试