Unix系统文件表

时间:2013-01-07 04:36:49

标签: unix system filetable

我对Unix系统文件表感到困惑。

  • 当两个或多个进程打开文件进行读取时,系统文件表是否为每个进程或单个条目创建单独的条目?

  • 如果为打开同一文件的多个进程创建了一个条目,它们的文件偏移量是否也相同?

  • 如果process 1打开file1.txt进行阅读,process 2打开同一个文件file1.txt进行写入,系统文件表是否会创建一个或两个条目?< / p>

2 个答案:

答案 0 :(得分:27)

有三个“系统文件表”:有一个文件描述符表,它将文件描述符(小整数)映射到打开文件表中的条目。打开文件表中的每个条目包含(除其他外)文件偏移量和指向内存中inode表的指针。这是一张图片:

因此,打开文件既没有一个文件表条目,也没有每个进程只有一个...每个open()调用一个,如果文件描述符是{{1}则共享它} ed或dup() ed。

回答你的问题:

1)当两个或多个进程打开文件进行读取时,每个打开的文件表中都有一个条目。如果一个进程多次打开文件,则每次打开都会有一个条目。

2)在打开文件表中为打开相同文件的不同进程创建了一个的条目(但在内存中的inode表中只有一个条目)。

3)如果file1.txt打开两次,在相同或两个不同的进程中,有两个不同的打开文件表条目(但在内存中的inode表中只有一个条目)。

答案 1 :(得分:0)

  

同一个文件可能由多个进程同时打开,甚至可能由同一个进程打开(导致同一文件有多个文件描述符),具体取决于文件组织和文件系统。对描述符的操作(如移动文件指针或关闭它)是独立的(它们不会影响同一文件的其他描述符)。通过对其他描述符的操作可以看到文件的操作(如写入)(后读取可以读取写入的数据)。

这是来自 open(System call) wiki page