Указание номера дескриптора файла?
-
26-09-2019 - |
Вопрос
Мое понимание было то, что нельзя контролировать файловый дескриптор (целое число), назначенное ОС при открытии нового файла с использованием Open (). Как тогда можно в Bash Shell для назначения определенного файлового дескриптора, используя команду, как
exec 5>&1
(Полагаю, я мог бы узнать, читая источники Bash ...)
Решение
Я верю, что вы правы, что иногда файловые дескрипторы уже могут быть использованы. Я получил это из http://tldp.org/ldp/abs/html/io-redirection.html#ftn.aen17716.
«Использование дескриптора 5 файла может вызвать проблемы. Когда Bash создает дочерний процесс, как с Exec, ребенок наследует FD 5 (см. Заархивированный E-mail Chet Ramey, Тема: Re: файл дескриптор 5 удерживается открытым). Лучше всего оставить эту конкретную ФД только ».
Революция к этому указано в разделе 3.6 пункта 2 Руководства Bash.
Каждое перенаправление, которое может быть предшественнее на номер файлового дескриптора, может быть вместо этого предшествует слово форму
{varname}
. Отказ В этом случае для каждого оператора перенаправления, кроме> & - и <& -, оболочка выделит дескриптор файла больше 10 и назначает его {varname}. Если> & - или <& - предшествует {varname}, значение varname определяет дескриптор файла для закрытия.
Например
#!/bin/bash
exec {NEW_STDOUT}>&1
echo "Hello" >&$NEW_STDOUT
exec {NEW_STDOUT}>&-
Другие советы
Увидеть ДУП2. System Unix System Call.
Кроме того, файловые дескрипторы назначаются последовательно, поэтому, если вы знаете 0, 1, 2, ..., N уже открыты, и ни один из них не был закрыт, следующий будет N + 1.