深入理解计算机系统-第十章 系统级I/O-结果分析

链接
系统级I/O
相关函数
结果分析

abcde.txt
abcde.txt中的内容为 abcde
在这里插入图片描述
ffiles1
$ gcc csapp.h csapp.c ffiles1.c -lpthread -o ffiles1
$ ./ffiles1 abcde.txt
在这里插入图片描述
三个文件描述符fd1、fd2、fd3,都有各自的打开文件表表项,每个描述符对于abcde.txt都有它自己的文件位置。执行语句dup2(fd2, fd3)后,fd2覆盖fd3,此时fd2和fd3指向同一个打开文件表表项。因此c1=c2=a,c3=b。

ffiles2
$ gcc csapp.h csapp.c ffiles2.c -lpthread -o ffiles2
$ ./ffiles2 abcde.txt
在这里插入图片描述
在fork执行前,c1=a。子进程继承父进程的描述符表,以及所有进程共享同一个打开文件表。因此,描述符fd1在父进程和子进程中都指向同一个打开文件表表项。当子进程读取文件的第二个字节"b"后(子进程中c2=b),文件位置加1,父进程读第三个字节“c”(父进程中c2=c)。

ffiles3
$ gcc csapp.h csapp.c ffiles3.c -lpthread -o ffiles3
$ ./ffiles3 abcde.txt
在这里插入图片描述
三个文件描述符fd1、fd2、fd3,都有各自的打开文件表表项,每个描述符对于abcde.txt都有它自己的文件位置。
fd1打开abcde.txt文件截断并写入"pqrs",此时文件内容为 pqrs。
fd3设置文件位置到文件的结尾处(O_APPEND),写入"jklmn",此时文件内容为 pqrsjklmn。
fd2 = dup(fd1); 将描述符fd1复制给描述符fd2,fd2文件位置与fd1相同,即位于第四个字节,写入"wxyz",此时文件内容为 pqrswxyzn。
fd3设置文件位置到文件的结尾处,写入"ef",此时文件内容为 pqrswxyznef。

statcheck
$ gcc csapp.h csapp.c statcheck.c -lpthread -o statcheck
$ ./statcheck abcde.txt
在这里插入图片描述
abcde.txt为普通文件,有可读权限。

$ ./statcheck folder
在这里插入图片描述
folder为目录文件,有可读权限。
深入理解计算机系统-第十章 系统级I/O-结果分析_第1张图片

你可能感兴趣的:(深入理解计算机系统-第十章 系统级I/O-结果分析)