.\" -*- 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 .\" and Copyright (C) 2014 Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" Modified 1993-07-21, Rik Faith .\" Modified 1994-08-21, Michael Chastain : .\" Fixed typos. .\" Modified 1997-01-31, Eric S. Raymond .\" 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 "3 maja 2023 r." "Linux man\-pages 6.05.01" .SH NAZWA dup, dup2, dup3 \- duplikuje deskryptor pliku .SH BIBLIOTEKA Standardowa biblioteka C (\fIlibc\fP, \fI\-lc\fP) .SH SKŁADNIA .nf \fB#include \fP .PP \fBint dup(int \fP\fIoldfd\fP\fB);\fP \fBint dup2(int \fP\fIoldfd\fP\fB, int \fP\fInewfd\fP\fB);\fP .PP \fB#define _GNU_SOURCE\fP /* Zob. feature_test_macros(7) */ \fB#include \fP /* Definicja stałych \fBO_*\fP */ \fB#include \fP .PP \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. .PP 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. .PP .\" 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. .PP 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()). .PP 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. .PP 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. .PP 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: .PP .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 , Andrzej Krzysztofowicz i Michał Kułach . .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 .