dup

dup(2)                         2007-10-27-16:31                         dup(2)



ÐÐÐÐÐ
       dup, dup2 - дÑблÑÑ Ð´ÐµÑкÑипÑÐ¾Ñ ÑайлÑ


СТÐСÐÐÐ ÐÐÐЯÐ
       #include <unistd.h>

       int dup(int oldfd);

       int dup2(int oldfd, int newfd);


ÐÐÐС
       dup Ñ dup2 ÑÑвоÑÑÑÑÑ ÐºÐ¾Ð¿ÑÑ Ð´ÐµÑкÑипÑоÑÑ ÑÐ°Ð¹Ð»Ñ oldfd.
       ÐÑÑÐ»Ñ ÑÑпÑÑного завеÑÑÐµÐ½Ð½Ñ dup або dup2, новий Ñ
       ÑÑаÑий деÑкÑипÑÐ¾Ñ Ð¼Ð¾Ð¶ÑÑÑ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑваÑиÑÑ
       взаÑмозамÑнно. Ðони ÑпÑлÑно викоÑиÑÑовÑÑÑÑ ÑÑ
       ÑÐ°Ð¼Ñ Ð·Ð°Ð¼ÐºÐ¸ (locks), покажÑики на позиÑÑÑ ÑайлÑ
       Ñ Ð¿ÑапоÑÑÑ. ÐÑикладом, ÑкÑо позиÑÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ з
       ÑайлÑв-деÑкÑипÑоÑÑв помÑнÑлаÑÑ Ð·Ð°Ð²Ð´Ñки lseek,
       Ñе бÑде дÑйÑним Ñакож Ñ Ð´Ð»Ñ Ð´ÑÑгого
       деÑкÑипÑоÑÑ.

       Ðва деÑкÑипÑоÑи не подÑлÑÑÑÑ Ð¿ÑапоÑеÑÑ
       close-on-exec (закÑиÑÑÑ Ð¿Ð¾ виконаннÑ), Ñим не
       менÑ.

       dup викоÑиÑÑовÑÑ Ð²ÑлÑний деÑкÑипÑÐ¾Ñ Ð·
       найменÑим поÑÑдковим номеÑом Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾
       деÑкÑипÑоÑÑ.

       dup2 ÑÑвоÑÑÑ newfd Ñк копÑÑ oldfd, закÑиваÑÑи пеÑÑим
       newfd, ÑкÑо необÑÑдно.


ÐÐÐÐÐ ÐÐÐÐ ÐÐÐЧÐÐÐЯ
       dup Ñ dup2 повеÑÑаÑÑÑ Ð½Ð¾Ð²Ð¸Ð¹ деÑкÑипÑоÑ, або -1,
       ÑкÑо виникла ÑкаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° (Ñ ÑакомÑ
       випадкÑ, errno Ñакож оÑÑÐ¸Ð¼Ð°Ñ Ð²ÑдповÑдне
       знаÑеннÑ).


ÐÐÐÐ ÐÐÐÐÐÐÐ
       EBADF
               oldfd не ÑвлÑÑÑÑÑÑ Ð²ÑдкÑиÑим деÑкÑипÑоÑом
              ÑайлÑ, або newfd знаÑодиÑÑÑÑ Ð¿Ð¾Ð·Ð° межами
              Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¸Ñ Ð´ÐµÑкÑипÑоÑÑв ÑайлÑв.

       EMFILE
               ÐÑоÑÐµÑ Ð²ÑдкÑив макÑималÑно дозволенÑ
              кÑлÑкÑÑÑÑ Ð´ÐµÑкÑипÑоÑÑв ÑайлÑв Ñ Ð½Ð°Ð¼Ð°Ð³Ð°ÑÑÑÑÑ
              вÑдкÑиÑи Ñе один.

       EINTR
               Ðиклик dup2 бÑло пеÑеÑвано ÑкимоÑÑ
              Ñигналом.

       EBUSY
               (ТÑлÑки Ð´Ð»Ñ ÐÑнÑкÑа) може бÑÑи повеÑнÑÑим
              dup2 пÑд ÑÐ°Ñ ÑÑÐ°Ð½Ñ Ð¿ÐµÑÐµÐ³Ð¾Ð½Ñ (race condition) з
              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 Ñ ÑаÑакÑеÑним лиÑе Ð´Ð»Ñ ÐÑнÑкÑа.


ÐÐÐÐТЬСЯ ТÐÐÐÐ
       fcntl(2), open(2), close(2)

       ---- ÐеÑеклав ÐÑÑалÑй ЦибÑлÑк <vi@uatech.atspace.com>




© 2005-2007 DLOU, GNU FDL     2007-10-27-16:31                         dup(2)