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