0%

文件描述符

描述符表

  • Linux中一切都被抽象成文件,设备也是文件,socket、惯导、消息队列等都是文件。

  • 每个进程都有独立的描述符表。

  • 件描述符就是一个整形变量,表示文件在描述符表中的下标。

  • 每打开一个文件,就会将这个文件的描述符表中。每个进程都有三个默认文件描述符,分别是0(标准输入),1(标准输出),2(标准错误)。

  • 文件描述符一般是调用open()函数返回,调用close()函数会收回对应的文件描述符。

20220309205905

文件表

  • 所有进程共享同一个文件表。

  • 文件表记录了文件的一些信息,比如文件位置、引用计数以及指向v-node表的指针等。

  • 所有打开的文件都有一个文件位置,表示下一次读或写的起始位置。 seek, read, write 函数都可以修改该文件位置。

  • 所有进程共享同一个文件表。文件表中的一个表项可能会被多个描述符指向,引用计数用来表示当前有多少个描述符指向该文件表表项。当调用 close() 函数时,系统会将描述符对应的文件表表项的引用计数减1,然后如果引用计数已经为0,则系统会删除此文件表表项。

20220309211335

v-node表

  • 所有进程共享同一个 v-node 表。

  • 一个 v-node 表的表项对应于一个文件。它记录了文件的元数据信息。包括文件权限,文件大小,文件类型等信息。

  • 当对同一个文件调用多次 open() 函数,那么会产生多个文件表表项,但是只有一个 v-node 表表项。

20220309211619

20220309212229

Welcome to my other publishing channels