Кожен процес має власну таблицю дескрипторів файлів. Дескриптор файлу 4 в процесі 1234 балів всередині таблиці 1234 процесу. Дескриптор файлу 4 в процесі 5678 вказує всередині таблиці 5678 процесу. Випадок, з яким ви повинні бути знайомі, - це дескриптори файлів 0, 1 і 2, які для кожного процесу - це стандартний вхід, стандартний вихід і стандартна помилка, вказуючи туди, куди вони були перенаправлені.
Процес може відкривати один і той же файл не один раз. Це може статися випадково, наприклад, коли стандартний висновок і стандартна помилка перенаправляються на той же термінал або в один і той же файл. Записи в базовій таблиці файлів (наприклад, Linuxstruct file
) містять більше ніж інформацію про файл; вони також містять режими відкриття (наприклад, читання або запис) та інший стан (наприклад, прапори, наприклад, close-on-exec). Наприклад, у процесу може бути відкритий термінал для читання лише в дескрипторі файлів 0, а той самий термінал відкритий для запису лише в дескрипторі файлів 2. Записи таблиць файлів також містять положення процесу у файлі; процес може захотіти до lseek
двох різних позицій в одному файлі, і тому він буде використовувати dup
для отримання двох ручок до цього файлу.
4
в обох процесах є відносним до його власного числа відкритих fd. Fd0-2
(stdin, stdout, sdterr) завжди відкриваються для нового процесу, і номери не зарезервовані лише для цього процесу.