diff --git a/README.md b/README.md index 29a816f..5f11d3c 100644 --- a/README.md +++ b/README.md @@ -179,3 +179,95 @@ function 函数名(){ ``` 函数体内,可以使用$1,$2 ...$9 读取传递到函数的参数。 + +## 二、系统调用和进程(上) + +### 2.1 系统调用 I/O 函数 + +``` +#include +#include +#include +int open(const char *pathname, int flags); 文件存在时 +int open(const char *pathname, int flags, mode_t mode); 文件不存在时 + +#include +int close(int fd); +ssize_t write(int fd, const void *addr,size_t count); +ssize_t read(int fd, void *addr, size_t count); + + +#include +int remove(const char *pathname); +``` + +### 2.2 fcntl 函数 + +``` +// 修改标准的输入设备的标识为非阻塞 +int flags = fcntl(STDIN_FILENO, F_GETFL); +flags |= O_NONBLOCK; +fcntl(STDIN_FILENO, F_SETFL, flags); +``` + +### 2.3 进程的定义 + +``` +进程拥有自己独立的处理环境和系统资源(处理器、存储器、I/O 设备、数据、程序) +``` + +进程的三种状态: + +``` +就绪态: 进程已经具备执行的一切条件,正在等待分配 CPU 的处理时间。 +执行态: 该进程正在占用 CPU 运行。 +等待态: 进程因不具备某些执行条件而暂时无法继续执行的状态。 +``` + +进程控制块(PCB): + +``` +OS 是根据 PCB 来对并发执行的进程进行控制和管理的。 +系统在创建一个进程的时候会开辟一段内存空间存放与此进程相关的 PCB 数据结构。 + +PCB 是操作系统中最重要的记录型数据结构,包含进程号、返回状态、运行时间等。 +``` + +获取进程号: + +``` +#include +#include + +pid_t getpid(void) 获取本进程号(PID) +pid_t getppid(void) 获取父进程号(PPID) +pid_t getpgid(pid_t pid) 获取进程组号(PGID),参数为0时返回当前PGID,否则返回参数指定的进程的PGID +``` + +### 2.4 进程控制函数 + +``` +#include +#include + +pid_t fork(void); 创建独立空间的子进程 + + + +#include +unsigned int sleep(unsigned int sec); 挂起或休眠sec秒 + + +#include +#include + +pid_t wait(int *status); +pid_t waitpid(pid_t pid, int *status, int options) +``` + +获取子进程的返回状态: + +``` +WIFEXITED(status) 如果子进程是正常终止的,取出的字段值非零 +WEXITSTATUS(status) 返回子进程的退出状态,退出状态保存在 status 变量的 8~16 位。在用此宏前应先用宏 WIFEXITED 判断子进程是否正常退出,正常退出才可以使用此宏。 +```