MIT 6.1810:xv6 book Chapter 1:Operating system interfaces 笔记
System Callint fork()描述为调用它的进程的内存创建完全一样的副本返回原进程新进程的PID新进程返回0int exit(int status)描述使调用它的进程停止执行并释放资源如内存和打开的文件传入int状态参数0成功/1失败int wait(int* status)返回当前进程的已退出终止的子进程的PID若当前进程没有子进程立刻返回-1描述将子进程的退出状态赋值给传入wait的地址如果没有已退出的子进程则wait等待。如果当前进程没有子进程wait立刻返回-1.如果当前进程不在意子进程的退出状态可以给wait传入地址0intpidfork();if(pid0){printf(parent: child%d\n,pid);pidwait((int*)0);printf(child %d is done\n,pid);}elseif(pid0){printf(child: exiting\n);exit(0);}else{printf(fork error\n);int exec(char* file, char* argv[])传入两个参数含可执行文件的文件名字符串参数组char*argv[3];argv[0]echo;argv[1]hello;argv[2]0;exec(/bin/echo,argv);printf(exec error\n);char* sbrk(int n)描述将数据内存扩大n个零字节返回新内存的位置文件描述符0标准输入1标准输出2标准报错int read(int fd, char* buf, int n)描述从文件描述符fd中读取读取至多n字节复制进buf返回读取的字节数int write(int fd, char* buf, int n)描述从buf中写入n字节进文件描述符fd。只有在错误发生时才会写入小于n个字节。返回写入的字节数charbuf[512];intn;for(;;){nread(0,buf,sizeofbuf);if(n0)break;if(n0){fprintf(2,read error\n);exit(1);}if(write(1,buf,n)!n){fprintf(2,write error\n);exit(1);}}int open(char* file, int flags)传入第一个参数为文件名第二个参数由一组标志组成包括O_RDONLY只读/ O_WRONLY只写/ O_RDWR读写/ O_CREATE不存在则创建/ O_TRUNC截短文件至长度为0char*argv[2];argv[0]cat;argv[1]0;if(fork()0){close(0);open(input.txt,O_RDONLY);exec(cat,argv);}int dup(int fd)描述复制一个已经存在的文件描述符返回一个新的文件描述符指向同一个底层I/O对象fddup(1);write(1,hello ,6);write(fd,world\n,6);//写入hello world\nint pipe(int p[])描述创建一个新管道将读和写的文件描述符记录在数组p内intp[2];char*argv[2];argv[0]wc;argv[1]0;pipe(p);if(fork()0){close(0);dup(p[0]);close(p[0]);close(p[1]);exec(/bin/wc,argv);}else{close(p[0]);write(p[1],hello world\n,12);close(p[1]);}int mknod(char* file, int, int)描述创建一个特殊的指向设备的文件传入后两个参数是主设备号和次设备号int fstat(int fd, struct stat* st)描述从文件描述符指向的inode文件名和文件本身共同的底层文件获取信息填充至struct stat中int link(char* file1, char* file2)描述创建另一个文件系统名指向与当前文件相同的inodeint unlink(char* file)描述从文件系统中移除一个名字open(a,O_CREATE|O_WRONLY);link(a,b);//从a读写相当于从b读写unlink(a);//inode和文件内容可通过b访问