我感到困惑的Unix系统文件表。
当两个或多个进程打开文件进行读取,并在系统文件表创建为每个进程或单个条目单独条目?
如果一个条目的多个进程打开相同的文件创建,将他们的文件偏移量也一样吗?
如果
process 1
打开file1.txt
读取和process 2
打开同一个文件file1.txt
写作,将系统文件表创建一个或两个条目?
我感到困惑的Unix系统文件表。
当两个或多个进程打开文件进行读取,并在系统文件表创建为每个进程或单个条目单独条目?
如果一个条目的多个进程打开相同的文件创建,将他们的文件偏移量也一样吗?
如果process 1
打开file1.txt
读取和process 2
打开同一个文件file1.txt
写作,将系统文件表创建一个或两个条目?
有三个“系统文件表”:有是文件描述符(小整数)的条目映射在打开文件表的文件描述符表。 在打开文件表中的每个条目包含(除其他事项外)的文件偏移和一个指向内存中的inode表。 这里有一个画面:
所以既不是一个打开的文件只是一个文件表项也不存在只是每个进程一个...有一个每open()
调用,如果文件描述符是它是共享的dup()
版或fork()
编。
回答你的问题:
1)当两个或多个进程打开文件进行读取,有一个在每个打开的打开文件表中的条目。 甚至有每开如果一个进程多次打开该文件中的条目。
2)单个条目未在打开文件表创建为不同进程打开相同的文件(但在内存中的节点表只有一个条目)。
3)如果FILE1.TXT被打开两次,在同一个或两个不同的过程,有两种不同的打开文件表项(但在内存中的inode表只有一个条目)。
相同的文件可以同时被几个进程被打开,并且甚至通过相同的工艺(导致对同一文件几个文件描述符)取决于文件组织和文件系统。 像移动文件指针,或关闭它描述的操作是独立的(不影响其它的描述相同的文件)。 该文件(如写入)的操作可以通过在其他描述的操作可以看出(一后读可以读取写入的数据)。
这是从开放(系统调用)的维基页面