Unix system file tables

后端 未结 2 1824
感情败类
感情败类 2021-01-30 15:14

I am confused about Unix system file tables.

  • When two or more processes open a file for reading, does the system file table create separate entries for each pro

相关标签:
2条回答
  • 2021-01-30 15:31

    The same file may be opened simultaneously by several processes, and even by the same process (resulting in several file descriptors for the same file) depending on the file organization and filesystem. Operations on the descriptors like moving the file pointer, or closing it are independent (they do not affect other descriptors for the same file). Operations of the file (like a write) can be seen by operations on the other descriptors (a posterior read can read the written data).

    This is from the open(System call) wiki page

    0 讨论(0)
  • 2021-01-30 15:46

    There are three "system file tables": There is a file descriptor table that maps file descriptors (small integers) to entries in the open file table. Each entry in the open file table contains (among other things) a file offset and a pointer to the in-memory inode table. Here's a picture: (source: rich from www.cs.ucsb.edu now on archive.org)

    So there is neither just one file table entry for an open file nor is there just one per process ... there is one per open() call, and it is shared if the file descriptor is dup()ed or fork()ed.

    Answering your questions:

    1. When two or more processes open a file for reading, there's an entry in the open file table per open. There is even an entry per open if one process opens the file multiple times.

    2. A single entry is not created in the open file table for different processes opening same file (but there is just one entry in the in-memory inode table).

    3. If file1.txt is opened twice, in the same or two different processes, there are two different open file table entries (but just one entry in the in-memory inode table).

    0 讨论(0)
提交回复
热议问题