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) the file offset and a pointer to the inode table in memory. Here is the picture: 
(source: rich on www.cs.ucsb.edu )
Thus, there is not a single entry in the file table for an open file, and there is not only one entry per process ... there is one entry for calling open() , 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, an entry for each opening appears in the open file table. There is even an entry for each opening if one process opens the file several times.
2) One record is not created in the table of open files for different processes that open the same file (but in the table inode there is only one record in memory).
3) If the file1.txt file is opened twice, in the same or two different processes, there are two different entries in the open files table (but only one entry in the inode table in memory).
source share