Что и почему? – Дескрипторы файлов

Что такое дескриптор файла? Зачем они нужны?

  • mkdir дает разные ошибки (разрешение отклонено против файла существует) в зависимости от того, был ли доступ к каталогу недавно
  • Как Linux или Unix «/» устанавливаются во время загрузки?
  • Есть ли средство командной строки для чтения байтовых секторов / кластеров с определенных адресов на диске?
  • С помощью «find /» пропустите каталоги, такие как «/ proc», «/ sys» и аналогичные
  • Умный способ дефрагментации файловой системы FAT?
  • Настройка файловой системы ext4 для раздела хранения
  • Зачем мне нужен ntfs-3g, когда я уже включил поддержку NTFS в ядре?
  • Что происходит с UID при монтировании файловой системы
  • Как получить полный и точный список смонтированных файловых систем в Linux?
  • Как обрабатываются разрешения ACL и в каком порядке они применяются к данному действию пользователя?
  • Как восстановить файловую систему Fat32 под Linux
  • Изменение md5sum после монтирования?
  • 2 Solutions collect form web for “Что и почему? – Дескрипторы файлов”

    Дескриптор файла – это число, которое представляет собой открытый файл в процессе. Это способ для программы запомнить, какой файл он манипулирует. Открытие файла ищет бесплатный номер и присваивает его файлу в таблице дескриптора файла процесса; закрытие файла удаляет запись из таблицы дескриптора процесса. Между файловым дескриптором n в процессе и файловым дескриптором с тем же номером в другом процессе нет никакой связи.

    «Каждый файл имеет три из них (stdin, stdout, stderr)» – это нонсенс. Процессы имеют файловые дескрипторы, а не файлы. Процессы могут и часто имеют более трех дескрипторов файлов и могут иметь меньше. Stdin, stdout и stderr – это имена файловых дескрипторов 0, 1 и 2, потому что они имеют обычное значение: stdin (стандартный ввод) – это то место, где программа должна читать пользовательский ввод (если он хочет), stdout (стандартный вывод) где программа должна писать данные, которые она производит (если она хочет), а stderr (стандартная ошибка) – для сообщений об ошибках. Stdin и stdout используются в программах, предназначенных для использования в командных линиях и особенно в трубопроводах; Я предлагаю вам прочитать, что подразумевается под подключением STDOUT и STDIN? и (более продвинутый). Как команда может иметь более одного выхода?

    Они представлены int

    Да, они нумеруются от нуля, что является обычным и простым средством учета уникальных предметов подобного рода. Вид как спортивные майки. Например, в команде может быть несколько вратарей, но вы знаете, какой из них играет в любой момент, потому что каждый член команды имеет уникальный номер. Это единственное значение.

    что такое дескриптор файла?

    Он относится к входному / выходному кабелю. Обычно они только один или другой, но они, возможно, оба.

    Каждый файл имеет три из них

    Как правило, каждый процесс имеет по крайней мере три из них, это особенность ОС OS * nix.

    Зачем они нужны?

    Они вам не нужны, если вы не хотите делать ввод / вывод в нечто иное, чем текущий процесс. Тем не менее, «вы» в таком процессе должны быть абстрактными в смысле «я написал это», поскольку никто из вас, включая вас, никогда не сможет его осмысленно использовать. Процессы не существуют в пустоте, они являются объектами, управляемыми операционной системой, и им необходимо взаимодействовать с другими объектами, файлами доступа, аппаратными устройствами и т. Д. Дескрипторы файлов – это фундаментальное средство для этого.

    Почему я не могу сказать, что я хочу написать stdin или stdout?

    Очевидно, в зависимости от контекста. В C это (якобы) макросы, которые возвращаются к соответствующему дескриптору низкого уровня (посмотрите в stdio.h …). Если вы ошиблись в WRT оболочке, вы всегда можете, например:

     export stdin=0 export stdout=1 

    Хотя это, вероятно, не очень хорошая идея , так как вы рискуете попасть в глобальное пространство имен, возможно, прискорбно. Кроме того, stdin занимает больше времени, чем 0 ;).

    Linux и Unix - лучшая ОС в мире.