Концепция дескриптора файла важна из-за выбора дизайна UNIX, что «все является файлом», включая вещи, которые не являются частью файловой системы. Такие как ленточные накопители, клавиатура и экран (или телетайп!), Перфорированные устройства чтения карт / лент, последовательные соединения, сетевые соединения и (ключевое изобретение UNIX) прямые соединения с другими программами, называемыми «каналами».
Если вы посмотрите на многие из простого стандартного UNIX утилита типа grep
, особенно в их оригинальной версии, вы заметите , что они не включают в себя вызовы к open()
и , close()
но только read
и write
. Дескрипторы файла устанавливаются оболочкой вне программы и передаются при запуске. Поэтому программе не нужно заботиться о том, записывает ли она файл или другую программу.
А также open
, другие способы получения файлов дескрипторы socket
, listen
, pipe
, dup
, и очень Heath Robinson механизм для передачи дескрипторов файлов через трубу: https://stackoverflow.com/questions/28003921/sending-file-descriptor-by-linux -разъем
Изменить: некоторые лекционные заметки, описывающие слои косвенности и как это позволяет O_APPEND работать разумно. Обратите внимание, что хранение данных inode в памяти гарантирует, что системе не придется идти и извлекать их снова для следующей операции записи.