当前位置: 技术问答>linux和unix
文件描述符标志存放在什么地方啊?
来源: 互联网 发布时间:2015-12-25
本文导语: RT. 比如,我们打开一个文件时,可以 int myfd = open("/home/aaa/my.txt", O_RDONLY); 这里的“O_RDONLY”就是我所说的“文件描述符的标志”。我想问一下,这些标志存放在什么地方呢?是存放在进程描述符表中,还是存放在...
RT.
比如,我们打开一个文件时,可以
int myfd = open("/home/aaa/my.txt", O_RDONLY);
这里的“O_RDONLY”就是我所说的“文件描述符的标志”。我想问一下,这些标志存放在什么地方呢?是存放在进程描述符表中,还是存放在系统文件表中?(肯定不能存放在Inode中,我认为)
望高手解答,谢谢。
比如,我们打开一个文件时,可以
int myfd = open("/home/aaa/my.txt", O_RDONLY);
这里的“O_RDONLY”就是我所说的“文件描述符的标志”。我想问一下,这些标志存放在什么地方呢?是存放在进程描述符表中,还是存放在系统文件表中?(肯定不能存放在Inode中,我认为)
望高手解答,谢谢。
|
不需要高手就能回答。文件描述符标志,存放在每个进程表的“打开文件描述符表”中。
-----------摘自《Unix环境高级编程》第三章----------------
内核使用了三种数据结构,它们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响。
(1) 每个进程在进程表中都有一个记录项,每个记录项中有一张打开文件描述符表,可将其视为一个矢量,每个描述符占用一项。与每个文件描述符相关联的是:(a) 文件描述符标志。(b) 指向一个文件表项的指针。
(2) 内核为所有打开文件维持一张文件表。每个文件表项包含:(a) 文件状态标志(读、写、增写、同步、非阻塞等)。(b) 当前文件位移量(c) 指向该文件v节点表项的指针。
(3) 每个打开文件(或设备)都有一个 v节点结构。v节点包含了文件类型和对此文件进行各种操作的函数的指针信息。对于大多数文件, v节点还包含了该文件的 i节点(索引节点)。这些信息是在打开文件时从盘上读入内存的,所以所有关于文件的信息都是快速可供使用的。例如,i节点包含了文件的所有者、文件长度、文件所在的设备、指向文件在盘上所使用的实际数据块的指针等等
-----------摘自《Unix环境高级编程》第三章----------------
内核使用了三种数据结构,它们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响。
(1) 每个进程在进程表中都有一个记录项,每个记录项中有一张打开文件描述符表,可将其视为一个矢量,每个描述符占用一项。与每个文件描述符相关联的是:(a) 文件描述符标志。(b) 指向一个文件表项的指针。
(2) 内核为所有打开文件维持一张文件表。每个文件表项包含:(a) 文件状态标志(读、写、增写、同步、非阻塞等)。(b) 当前文件位移量(c) 指向该文件v节点表项的指针。
(3) 每个打开文件(或设备)都有一个 v节点结构。v节点包含了文件类型和对此文件进行各种操作的函数的指针信息。对于大多数文件, v节点还包含了该文件的 i节点(索引节点)。这些信息是在打开文件时从盘上读入内存的,所以所有关于文件的信息都是快速可供使用的。例如,i节点包含了文件的所有者、文件长度、文件所在的设备、指向文件在盘上所使用的实际数据块的指针等等