每个进程开始时,三个打开的文件:stdin(0)、stdout(1)、stderr(2)。
open
函数返回的描述符总是在进程中当前没有打开的最小描述符。
内核用来表示打开的文件的三个数据结构:
- 描述符表:每个进程有独立的描述符表,表项是由进程打开的文件描述符来索引的,每个打开的描述符表项指向文件表中的一个表项
- 文件表:打开文件的集合,所有进程共享,表项包括当前的文件位置、引用计数、指向 v-node 表中对应表项的指针。关闭一个描述符会减少相应文件表表项中的引用计数,减到 0 时删除文件表表项
- v-node 表:所有进程共享,表项包含 stat 结构中的大多数信息,包括
st_mode
、st_size
等
P625-10.1、P636-10.2-10.3、P637-10.4-10.5、书后-10.6-10.9