Файловий дескриптор

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

В Unix та Unix-подібних операційних системах файловий дескриптор — це невід’ємне ціле число (ідентифікатор), закріплене за певним потоком вводу-виводу. При створенні нового потоку вводу-виводу (що може бути пов’язаний як з файлами, так і з іншими ресурсами вводу-виводу, наприклад каталогами, сокетами чи FIFO) ядро повертає його файловий дескриптор процесові, яким потік був створений. Файловий дескриптор може використовуватися для отримання доступу до потоку.


За замовчуванням, Unix-оболонки повязують файловий дескриптор 0 з потоком стандартного вводу (клавіатура), файловий дескриптор 1 ― з потоком стандартного виводу (термінал), і файловий дескриптор 2 ― зі стандартним виводом помилок (діагностичні та відлагоджувальні повідомлення, інформація про помилки). Ця домовленість дотримується багатьма Unix-оболонками та багатьма застосунками, але не є складовою частиною ядра. Стандарт POSIX.1 замінив «магічні числа» 0, 1, 2 на символічні константи STDIN_FILENO, STDOUT_FILENO та STDERR_FILENO відповідно. Таким чином, у кожного процеса Unix (окрім демонів) має бути три стандартних файлових дескриптори POSIX, що відповідають трьом стандартним потокам:

Ціле значення Name <unistd.h> символічна константа[1] <stdio.h> файловий потік[2]
0 Стандартний ввід STDIN_FILENO stdin
1 Стандартний вивід STDOUT_FILENO stdout
2 Стандартний вивід помилок STDERR_FILENO stderr

Файлові дескриптори можуть набувати значень від 0 до OPEN_MAX. Згідно POSIX.1, значення OPEN_MAX дорівнює 19. В реальних ОС це значення може бути більше. На сьогоднішній день в Linux OPEN_MAX вважається застарілим.[3]

Примітки

[ред. | ред. код]
  1. The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition. Архів оригіналу за 13 березня 2021. Процитовано 5 березня 2015.
  2. The IEEE and The Open Group. <stdio.h>. The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition. Архів оригіналу за 23 вересня 2020. Процитовано 31 травня 2014.
  3. Whether OpenMAX is deprecated? What is the uptodate multimedia platform on RPi?.