材料阅读
linux系统调用函数名 | 描述 |
---|---|
int wait(int * status) | wait函数返回值为子进程的PID,status指针会存子进程返回的状态值(0成功,1错误) |
int getpid() | 返回进程id值 |
1.1 Process And Memory
1.2 IO File Descriptors
文件描述符 可以描述一个 文件,pipe,或者device
每个进程都有自己独有的文件描述符表(从 0 开始),用来表示该进程已经打开的文件或者IO资源。
standard input: 0
standard output: 1
standard error: 2
read(fd, buf, n): 从文件fd中读最多n字节,到内存buf中,返回读取的字节数
write(fd, buf, n): 把n个字节从buf写入到fd中,并且返回写入的字节数。当出现错误时,返回值就会小于n。
每个文件描述符在执行读或者写时,都有一个自己的offset,这样在完成一次读写操作后,回来从读写上一次的offset接着读写。
子继承 从 父进程 fork出来时,会继承父进程的 文件描述符表,但修改子进程的文件描述符所指向的文件 不会影响父进程的,这也就是IO重定向的实现原理。
char *argv[2];
argv[0] = "cat";
argv[1] = 0;
if(fork() == 0) {
// 如果是子进程的话,先把文件描述符 0(标准输入)关闭
close(0);
open("input.txt", O_RDONLY);
exec("cat", argv);
}