Всі четверо /dev/fd/0
, /dev/stdin
, /proc/self/fd/0
і /dev/pts/2
імена файлів, так само як /////dev/../dev/fd//0
, /bin/sh
, /etc/fstab
, /fioejfoeijf
і т.д. Все , але це останній приклад, швидше за все, ім'я існуючого файлу на вашому комп'ютері. Ім'я файлу - це рядок, який може позначати файл у вашій файловій системі; під Linux, будь-яка рядок, що не містить нульового байта і має довжину не більше 4096 байт, є дійсним ім'ям файлу. Багато з цих імен еквівалентні, наприклад , /bin/sh
еквівалентні ///bin/sh
, /bin/../bin/sh
(припускаючи , що /bin
це існуючий каталог) і т.д. Всі ці приклади я дав до сих пір абсолютні імена файлів; Є також відносні імена файлів, які не починаються з а /
і значення яких залежать від поточного каталогу.
Термінологія навколо імен файлів не є універсальною; іноді "ім'я файлу" означає повний шлях до файлу, а іноді означає ім'я запису каталогу. Термінологія POSIX - це " ім'я файлу " або " компонент імені шляху " для імені запису каталогу та " ім'я шляху " для повного шляху.
Дескриптор файлу позначає відкритий файл у певному процесі. Ядро підтримує таблицю дескрипторів файлів для кожного процесу. Кожен запис у таблиці дескрипторів файлів вказує, що робити, якщо процес вимагає читання, запису та інших операцій над дескриптором файлів.
Дескриптори файлів можуть відповідати файлу і мати пов’язане ім'я, але не всі вони. Для тих, хто це робить, цей файл може бути звичайним файлом, каталогом, файлом пристрою або названою трубкою (також називається FIFO) (вид, створений компанією mkfifo
); деякі системи мають інші можливості, такі як розетки та двері Unix. Приклади дескрипторів файлів, які не мають асоційованого іменованого файлу, включають труби (вид, створений самим pipe
) та мережеві сокети .
/dev/fd/0
, /dev/stdin
і /proc/self/fd/0
є назви файлів (усі еквівалентні) з особливим значенням: всі вони позначають те, до якого файлу в даний час можна отримати доступ через дескриптор файлу 0. Коли процес відкриває їх, ядро копіює запис з індексом 0 у таблицю дескрипторів файлу дескриптора до нової дескриптор. Відкриття будь-якого з цих файлів рівнозначно дзвінкам dup(0)
. Названі файли - це спосіб опосередковано отримати процес використання одного з уже відкритих файлів, а не відкриття нового файлу; вони в основному корисні для передачі в командному рядку програми, де програма очікує відкриття імені файлу.