book · csapp · 2016-08-27 · yuex

当文件与进程结合时,有以下几个地方需要注意

fd table -> open file table -> v-node table
1. fd table 是每进程独立的数据
2. open file table 是所有进程共享的系统全局数据。这里维护了每个打开文件的反
   向映射数目和当前光标位置。当映射数目为 0 时,文件会被关闭。每个 open() 都会
   导致一个新的 open file table entry,即使打开的是同一文件。
3. v-node table 是所有进程共享的系统全局数据。这里维护了每个文件的信息,如访
   问权限、文件类型、文件大小、三个时间等

基于以上事实,如果文件打开之后进行 fork,那么 fork 后的子母进程其实是共享了打开文 件的读写位置的,虽然 fd 是独立的。

当然 fd table 中的前三号是默认帮你打开到 stdin/stdout/stderr 的。

-EOF-