Ответ 1
Существует три "таблицы системных файлов": Существует таблица дескрипторов файлов, которая отображает дескрипторы файлов (маленькие целые числа) на записи в таблице открытых файлов. Каждая запись в таблице открытых файлов содержит (среди прочего) смещение файла и указатель на таблицу inode в памяти. Вот картинка:
(источник: богатый на www.cs.ucsb.edu)
Таким образом, нет ни одной записи в таблице файлов для открытого файла, и при этом не существует только одной записи на процесс... существует одна запись для вызова open()
, и она используется совместно, если дескриптор файла имеет значение dup()
ed или fork()
ed,
Отвечая на ваши вопросы:
1) Когда два или более процессов открывают файл для чтения, в открытой таблице файлов появляется запись для каждого открытия. Существует даже запись для каждого открытия, если один процесс открывает файл несколько раз.
2) Одна запись не создается в таблице открытых файлов для разных процессов, открывающих один и тот же файл (но в таблице inode в памяти есть только одна запись).
3) Если файл file1.txt открывается дважды, в одном и том же или двух разных процессах, есть две разные записи таблицы открытых файлов (но только одна запись в таблице inode в памяти).