Provided by: manpages-pl-dev_20051117-1_all bug

NAZWA

       dup, dup2 - powielenie deskryptora pliku

SKŁADNIA

       #include <unistd.h>

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

OPIS

       dup i dup2 tworzą kopię deskryptora pliku oldfd.

       Po pomyślnym zakończeniu dup lub dup2, stary i nowy deskryptor mogą być
       używane zamiennie. Współdzielą one blokady, pozycję pliku i  znaczniki;
       na  przykład,  jeśli pozycja pliku zmieni się w wyniku użyciu lseek dla
       jednym z deskryptorów, zmieni się ona także dla drugiego.

       Te dwa deskryptory nie współdzielą jednak znacznika close-on-exec.

       dup używa dla nowego deskryptora nieużywanego deskryptora o  najniższym
       numerze.

       dup2  powoduje,  że  newfd  staje  się  kopią oldfd, zamykając najpierw
       newfd, jeśli jest to potrzebne.

WARTOŚĆ ZWRACANA

       dup i dup2 zwracają nowy deskryptor, lub -1 po błędzie (w tym przypadku
       odpowiednio ustawiane jest errno).

BŁĘDY

       EBADF  oldfd nie jest deskryptorem otwartego pliku, lub newfd jest poza
              dozwolonym dla deskryptorów plików zakresem.

       EMFILE Proces już osiągnął  maksymalną  liczbę  otwartych  deskryptorów
              plików, a próbował otworzyć nowy.

OSTRZEŻENIE

       Błąd  zwracany  przez  dup2  jest  inny  niż  zwracany przez fcntl(...,
       F_DUPFD, ...), gdy newfd jest poza  zakresem.  W  niektórych  systemach
       dup2 zwraca też czasem EINVAL jako F_DUPFD.

USTERKI

       Jeśli newfd był otwarty, wszelkie błędy, które mogłyby zostać zgłoszone
       w chwili wykonania close() zostaną utracone. Ostrożny  programista  nie
       użyje dup2 bez wcześniejszego zamknięcia newfd.

ZGODNE Z

       SVr4,  SVID,  POSIX,  X/OPEN, BSD 4.3. SVr4 dokumentuje dodatkowe błędy
       EINTR i ENOLINK. POSIX.1 dodaje EINTR.

ZOBACZ TAKŻE

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