.\" -*- coding: UTF-8 -*-
.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
.\" and Copyright (C) 1993 Michael Haardt, Ian Jackson.
.\" and Copyright (C) 2005, 2008 Michael Kerrisk <mtk.manpages@gmail.com>
.\" and Copyright (C) 2014 Michael Kerrisk <mtk.manpages@gmail.com>
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.\" Modified 1993-07-21, Rik Faith <faith@cs.unc.edu>
.\" Modified 1994-08-21, Michael Chastain <mec@shell.portal.com>:
.\"   Fixed typos.
.\" Modified 1997-01-31, Eric S. Raymond <esr@thyrsus.com>
.\" Modified 2002-09-28, aeb
.\" 2009-01-12, mtk, reordered text in DESCRIPTION and added some
.\"     details for dup2().
.\" 2008-10-09, mtk: add description of dup3()
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH dup 2 "2 maja 2024 r." "Linux man\-pages 6.8" 
.SH NAZWA
dup, dup2, dup3 \- duplikuje deskryptor pliku
.SH BIBLIOTEKA
Standardowa biblioteka C (\fIlibc\fP, \fI\-lc\fP)
.SH SKŁADNIA
.nf
\fB#include <unistd.h>\fP
.P
\fBint dup(int \fP\fIoldfd\fP\fB);\fP
\fBint dup2(int \fP\fIoldfd\fP\fB, int \fP\fInewfd\fP\fB);\fP
.P
\fB#define _GNU_SOURCE\fP             /* Zob. feature_test_macros(7) */
\fB#include <fcntl.h>\fP              /* Definicja stałych \fBO_*\fP */
\fB#include <unistd.h>\fP
.P
\fBint dup3(int \fP\fIoldfd\fP\fB, int \fP\fInewfd\fP\fB, int \fP\fIflags\fP\fB);\fP
.fi
.SH OPIS
Wywołanie systemowe \fBdup\fP() przydziela nowy deskryptor pliku odnoszący się
do tego samego opisu otwartego pliku (OFD), jak deskryptor \fIoldfd\fP
(wyjaśnienie opisów otwartych plików znajduje się w podręczniku
\fBopen\fP(2)). Gwarantuje się, że nowy numer deskryptora pliku będzie
najniższym numerem deskryptora pliku, który nie był używany w trakcie
procesu wywoływania.
.P
Po pomyślnym zakończeniu, stary i nowy deskryptor mogą być używane
zamiennie. Oba deskryptory odnoszą się do tego samego opisu otwartego pliku,
zatem współdzielą one przesunięcie pliku i znaczniki statusu pliku np. jeśli
przesunięcie pliku zmieni się w wyniku użyciu \fBlseek\fP(2) na jednym z
deskryptorów pliku, zmieni się ono także dla drugiego deskryptora pliku.
.P
.\"
Oba deskryptory nie dzielą znaczników deskryptora pliku (znacznika
zamknij\-przy\-wykonaniu). Znacznik zamknij\-przy\-wykonaniu (\fBFD_CLOEXEC\fP;
zob. \fBfcntl\fP(2)) dla duplikatu deskryptora jest wyłączony.
.SS dup2()
Wywołanie systemowe \fBdup2\fP() wykonuje takie samo zadanie jak \fBdup\fP(), lecz
zamiast używać najniższego numeru nieużywanego deskryptora pliku, używa
numeru deskryptora pliku podanego w \fInewfd\fP. Innymi słowy, deskryptor pliku
\fInewfd\fP jest dostosowywany tak, aby wskazywał teraz na ten sam opis
otwartego pliku (ODF) jak \fIoldfd\fP.
.P
Jeśli deskryptor pliku \fInewfd\fP był uprzednio otwarty, jest zamykany przed
ponownym użyciem; zamknięcie jest przeprowadzane po cichu (tj. ewentualne
błędy przy zamknięciu nie są zgłaszane przez \fBdup2\fP()).
.P
Kroki zamykania i ponownego użycia deskryptora pliku \fInewfd\fP są wykonywane
\fIniepodzielnie\fP. Jest to istotne, ponieważ próba zaimplementowania
równoważnej funkcjonalności za pomocą \fBclose\fP(2) i \fBdup\fP() prowadziłaby do
hazardu, gdzie \fInewfd\fP mógłby być użyty ponownie pomiędzy oboma
krokami. Mogłoby się tak zdarzyć, gdyby główny program został przerwany
procedurą obsługi sygnału przydzielającego deskryptor plików lub gdyby
równoległe wątki przydzielały deskryptor plików.
.P
Proszę zauważyć, co następuje:
.IP \[bu] 3
Jeśli \fIoldfd\fP nie jest prawidłowym deskryptorem pliku, to wywołanie
zawiedzie, a \fInewfd\fP nie jest zamykane.
.IP \[bu]
.\"
Jeśli \fIoldfd\fP jest prawidłowym deskryptorem pliku, a \fInewfd\fP ma tę samą
wartość co \fIoldfd\fP, to \fBdup2\fP() niczego nie dokona i zwróci \fInewfd\fP.
.SS dup3()
\fBdup3\fP() działa jak \fBdup2\fP(), tyle że:
.IP \[bu] 3
Wywołujący może wymusić, aby znacznik zamknięcia\-przy\-wykonaniu był
ustawiony dla nowego deskryptora pliku podając \fBO_CLOEXEC\fP w
\fIflags\fP. Proszę zapoznać się z opisem tego samego znacznika w \fBopen\fP(2),
aby przekonać się, dlaczego może być to użyteczne.
.IP \[bu]
.\" Ulrich Drepper, LKML, 2008-10-09:
.\"	We deliberately decided on this change.  Otherwise, what is the
.\"	result of dup3(fd, fd, O_CLOEXEC)?
Jeśli \fIoldfd\fP równa się \fInewfd\fP, to \fBdup3\fP()  zawodzi z błędem \fBEINVAL\fP.
.SH "WARTOŚĆ ZWRACANA"
W przypadku powodzenia, te wywołania zwracają nowy deskryptor pliku. W razie
wystąpienia błędu zwracane jest \-1 i ustawiane jest \fIerrno\fP wskazując błąd.
.SH BŁĘDY
.TP 
\fBEBADF\fP
\fIoldfd\fP nie jest otwartym deskryptorem pliku.
.TP 
\fBEBADF\fP
\fInewfd\fP jest poza dozwolonym przedziałem dla deskryptorów pliku (zob. opis
\fBRLIMIT_NOFILE\fP w \fBgetrlimit\fP(2)).
.TP 
\fBEBUSY\fP
(tylko Linux)  Błąd może być zwrócony przez \fBdup2\fP()  lub \fBdup3\fP() w razie
wystąpienia wyścigu z \fBopen\fP(2) i \fBdup\fP().
.TP 
\fBEINTR\fP
Wywołanie \fBdup2\fP() lub \fBdup3\fP() przerwano sygnałem; zob. \fBsignal\fP(7).
.TP 
\fBEINVAL\fP
(\fBdup3\fP())  \fIflags\fP zawiera nieprawidłową wartość.
.TP 
\fBEINVAL\fP
(\fBdup3\fP())  \fIoldfd\fP było równe \fInewfd\fP.
.TP 
\fBEMFILE\fP
Zostało osiągnięte ograniczenie na liczbę otwartych deskryptorów plików dla
procesu (zob. opis \fBRLIMIT_NOFILE\fP w \fBgetrlimit\fP(2)).
.SH STANDARDY
.TP 
\fBdup\fP()
.TQ
\fBdup2\fP()
POSIX.1\-2008.
.TP 
\fBdup3\fP()
Linux.
.SH HISTORIA
.TP 
\fBdup\fP()
.TQ
\fBdup2\fP()
.\" SVr4 documents additional
.\" EINTR and ENOLINK error conditions.  POSIX.1 adds EINTR.
.\" The EBUSY return is Linux-specific.
POSIX.1\-2001, SVr4, 4.3BSD.
.TP 
\fBdup3\fP()
Linux 2.6.27, glibc 2.9.
.SH UWAGI
Błąd zwracany przez \fBdup2\fP() jest inny niż zwracany przez \fBfcntl(\fP...,
\fBF_DUPFD\fP, ...\fB)\fP gdy \fInewfd\fP jest poza zakresem. W niektórych systemach
\fBdup2\fP() zwraca też czasem \fBEINVAL\fP jako \fBF_DUPFD\fP.
.P
Jeśli \fInewfd\fP był otwarty, wszelkie błędy, które mogłyby zostać zgłoszone w
chwili wykonania \fBclose\fP(2) zostaną utracone. Jeśli jest to istotne, to
\[en] o ile program jest jednowątkowy i nie przydziela deskryptorów pliku w
procedurach obsługi sygnału \[en] prawidłowym podejściem jest \fInie\fP
zamykanie \fInewfd\fP przez wywołanie \fBdup2\fP(), ze względu na sytuację hazardu
opisaną powyżej. Zamiast tego, można użyć kodu podobnego do poniższego:
.P
.in +4n
.EX
/* Pozyskanie duplikatu \[aq]newfd\[aq], którego można
   następnie użyć do sprawdzenia błędów close(); błąd EBADF
   oznacza, że \[aq]newfd\[aq] nie był otwarty. */
\&
tmpfd = dup(newfd);
if (tmpfd == \-1 && errno != EBADF) {
    /* Obsługa nieoczekiwanego błędu dup(). */
}
\&
/* Niepodzielne zduplikowanie \[aq]oldfd\[aq] w \[aq]newfd\[aq]. */
\&
if (dup2(oldfd, newfd) == \-1) {
    /* Obsługa błędu dup2(). */
}
\&
/* Teraz sprawdzenie błędów close() pliku, do którego
   \[aq]newfd\[aq] odnosił się pierwotnie. */
\&
if (tmpfd != \-1) {
    if (close(tmpfd) == \-1) {
        /* Obsługa błędów z close. */
    }
}
.EE
.in
.SH "ZOBACZ TAKŻE"
\fBclose\fP(2), \fBfcntl\fP(2), \fBopen\fP(2), \fBpidfd_getfd\fP(2)
.PP
.SH TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są:
Przemek Borys <pborys@dione.ids.pl>,
Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl>
i
Michał Kułach <michal.kulach@gmail.com>
.
.PP
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach
licencji można uzyskać zapoznając się z
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License w wersji 3
.UE
lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
.PP
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy
dyskusyjnej
.MT manpages-pl-list@lists.sourceforge.net
.ME .
