Разница между файлом и дескриптором файла, связанным с файлом

Я не знаю, что означает эта «норма», но сама команда немного странная. Какой смысл копировать / bin / mv в «переименовать»? Точно так же выполняет команду

cp /bin/mv rename

На случай, если вы не знали. Все внутри `расширяется, поэтому

`which mv`

производит (в некоторых системах вывод может быть другим)

/bin/mv

Другими словами. Все внутри `вызывается первым, а результат подставляется в финальную команду.

Это может быть любая команда, например. Думаю, вы знакомы с командами «свидание» и «прикосновение». Допустим, мы хотим создать файл с именем, совпадающим с текущей меткой времени. Команда для получения текущей отметки времени - дата +% s. Взгляните на этот пример.

touch `date +%s`

То же, но с другой командой внутри `. "date +% s" вызывается первым, и результат - 1460885688 (ваш будет другим). После этого вызываемая команда будет выглядеть так

touch 1460885688
3
29.05.2017, 23:38
2 ответа

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

По-другому, когда файловый дескриптор создается (ОС), он также создает структуру/таблицу, содержащую эти переменные состояния. В таблице есть только одна копия позиции чтения, и каждый раз, когда функция read() вызывается для файлового дескриптора, переменная единственной позиции чтения обновляется.

3
27.01.2020, 21:12

Когда вы говорите :read var <file, дескриптор файла -закрывается после завершения команды. Следовательно, в следующий раз в цикле дескриптор файла -сбрасывается в начало.

В случае exec 3<file, когда вы говорите read -r -u 3 var, дескриптор файла остается открытым, даже когда команда чтения завершается, И позиция чтения обновляется, поэтому в следующий раз чтение захватит следующую строку.

Примечание. :Даже если вы сделали exec 0<file, а затем read -r var, он все равно будет вести себя одинаково.

4
27.01.2020, 21:12

Теги

Похожие вопросы