Изменение файлового дескриптора вывода по умолчанию

По умолчанию, если при вызове print (или printf – все, что мы здесь говорим об одной функции, в равной степени относится к другой) не указан файловый дескриптор, данные направляются в STDOUT. Однако этот файловый дескриптор по умолчанию можно сменить оператором select. В следующем фрагменте несколько выходных строк отправляются в BEDROCK:

select BEDROCK;
print "I hope Mr. Slate doesn't find out about this.\n";
print "Wilma!\n";


Файловый дескриптор, выбранный по умолчанию для вывода, остается выбранным на будущее. Чтобы не создавать путаницу в программе, обычно рекомендуется возвращать STDOUT на место сразу же после завершения.1 По умолчанию вывод в каждый файловый дескриптор буферизуется. Если задать специальной переменной $| значение 1, текущий файловый дескриптор (то есть выбранный на момент изменения переменной) всегда сбрасывает буфер после каждой операции вывода. Таким образом, если вы хотите быть уверены в том, что все записи сохраняются в журнале одновременно (например, если вы читаете данные из журнала, отслеживая ход продолжительного выполнения программы), используйте конструкцию следующего вида:

select LOG;
$| = 1; # Не оставлять данные LOG в буфере
select STDOUT;
# ... Проходят годы, сдвигаются тектонические плиты, а потом...
print LOG "This gets written to the LOG at once!\n";
Теги:
дескриптор, select, умолчанию, print, вывода, STDOUT, после, BEDROCK, файлового, уверены, хотите, образом, буфер, Таким, операции, сохраняются, сбрасывает, всегда, изменения, момент, задать, буферизуется, записи, читаете, журнале, следующего, потом, плиты, сдвигаются, Проходят, буфере , оставлять, конструкцию, одновременно, используйте
Добавлено: 20 Июля 2018 08:20:44 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...