Шаг 32.
Доступ к файлу. Создание дескриптора-дубликата

    На этом шаге мы рассмотрим дескриптора-дубликат и его использование.

    Если в строке имени файла после префикса режима открытия следует амперсанд "&", то ее оставшаяся часть рассматривается как имя дескриптора файла, а не как имя открываемого файла. В этом случае создается независимая копия этого дескриптора с именем, заданным первым параметром функции open(). Оба дескриптора имеют общий указатель текущей позиции файла, но разные буферы ввода/вывода. Закрытие одного из дескрипторов не влияет на работу другого. В программах Perl возможность создания копии дескриптора в основном применяется для восстановления стандартных файлов ввода/вывода после их перенаправления на другие файлы.

    Следующий пример иллюстрирует использование дескрипторов-дубликатов:

#! perl -w
# Создание копии дескриптора STDOUT.
open(OLDOUT, ">&STDOUT");
# Перенаправление стандартного вывода.
open(STDOUT, "> file.out") or die "Невозможно перенаправить STDOUT: $!";
# Печать в файл file.out.
print "Информация в перенаправленный STDOUT\n";
# Закрытие перенаправленного дескриптора стандартного вывода.
close(STDOUT) or die "Невозможно закрыть STDOUT: $!";
# Восстановить файл стандартного вывода.
open(STDOUT, ">&OLDOUT") or die "Невозможно восстановить STDOUT: $!";
# Закрыть копию дескриптора стандартного вывода STDOUT.
close(OLDOUT) or die "Невозможно закрыть OLDOUT: $!";
# Печать в восстановленный файл стандартного вывода.
print "Информация в восстановленный STDOUT\n";
Текст этого примера можно взять здесь.


    Замечание. В программах следует избегать работы с одним файлом через несколько дескрипторов-копий.

    На следующем шаге мы рассмотрим функцию close().




Предыдущий шаг Содержание Следующий шаг