Provided by: manpages-ru_0.98-4_all bug

ИМЯ

       dup, dup2 - создать дубликат файлового дескриптора

ОБЗОР

       #include <unistd.h>

       int dup(int oldfd);
       int dup2(int oldfd, int newfd);

ОПИСАНИЕ

       dup и dup2 создают копию файлового дескриптора oldfd.

       Старый  и  новый дескрипторы можно использовать друг вместо друга.  Они
       имеют общие блокировки, указатель позиции в файле  и  флаги;  например,
       если  позиция  в  файле  была  изменена  с  помощью  lseek, на одном из
       дескрипторов, то эта позиция также меняется и на втором.

       Два  дескриптора,  однако,   каждый   имеют   свой   собственный   флаг
       закрыть-при-exec.

       dup использует самый маленький свободный номер дескриптора.

       dup2 делает newfd копией oldfd, закрывая newfd, если требуется.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

       dup и dup2 возвращают новый дескриптор или -1, если произошла ошибка (в
       этом случае errno устанавливается должным образом).

ОШИБКИ

       EBADF  oldfd не является открытым файловым дескриптором, или  же  newfd
              находится вне допустимого диапазона файловых дескрипторов.

       EMFILE Процесс  уже  открыл  максимальное  количество файлов и пытается
              открыть еще один.

       EINTR  Вызов dup2 был прерван каким-либо сигналом.

       EBUSY  (Только в Linux) Может случиться в dup2  во  время  при  условии
              состязательных вызовов open() и dup().

ВНИМАНИЕ

       Ошибка,  которую  возвращает  dup2,  отличается  от той, что возвращает
       fcntl(...,  F_DUPFD,  ...),  когда  newfd  находится   вне   допустимых
       пределов.   На  некоторых системах dup2 также иногда возвращает EINVAL,
       как F_DUPFD.

ОШИБКИ

       Если newfd был открыт, любые ошибки,  которые  могли  бы  случиться  во
       время  close(),  теряются. Осторожный программист не будет использовать
       dup2 не закрыв сперва newfd .

СООТВЕТСТВИЕ СТАНДАРТАМ

       SVr4, SVID, POSIX, X/OPEN, BSD 4.3. SVr4  документирует  дополнительные
       коды  ошибки  EINTR  и ENOLINK.  POSIX.1 добавляет EINTR.  Ошибка EBUSY
       является специфичной для Linux.

СМОТРИ ТАКЖЕ

       fcntl(2), open(2), close(2).

ПЕРЕВОД

       Copyright  (C)  Alexey  Mahotkin   <alexm@hsys.msk.ru>   1999,   Виктор
       Вислобоков <corochoone@perm.ru> 2003