Почему дескриптор файла называется файловым дескриптором?

«Почему дескриптор файла называется файловым дескриптором?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Термин "файловый дескриптор" (file descriptor) унаследован из философии Unix, где "всё — файл" (или, точнее, всё представляется через файловый интерфейс). Дескриптор — это не сам файл на диске, а целочисленный идентификатор (int), который ядро ОС выдает процессу при открытии любого ресурса, поддерживающего операции чтения/записи.

Почему "файловый"? Потому что изначально этот механизм использовался для работы с обычными файлами, но позже был расширен на другие сущности, которые можно абстрагировать под тот же интерфейс:

  • Обычные файлы и директории
  • Сетевые сокеты
  • Каналы (pipes)
  • Устройства (например, /dev/null)

Дескриптор — это индекс в таблице открытых файлов процесса, через который ядро знает, к какому конкретному объекту (файлу, сокету и т.д.) обращается программа.

Пример на языке C:

// open() возвращает файловый дескриптор — целое число, представляющее открытый файл.
int fd = open("/etc/hosts", O_RDONLY);
// read() использует этот дескриптор для операции.
ssize_t bytes_read = read(fd, buffer, sizeof(buffer));
close(fd); // Освобождение дескриптора.

Таким образом, название отражает историческую и концептуальную абстракцию, а не ограничение только дисковыми файлами.