Файловий дескриптор
В 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]
- ↑ The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition. Архів оригіналу за 13 березня 2021. Процитовано 5 березня 2015.
- ↑ 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.
- ↑ Whether OpenMAX is deprecated? What is the uptodate multimedia platform on RPi?.