.\" -*- coding: UTF-8 -*- .\" Copyright (C) 2005, 2008, Michael Kerrisk .\" (A few fragments remain from an earlier (1992) version by .\" Drew Eckhardt .) .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" Modified by Michael Haardt .\" Modified 1993-07-23 by Rik Faith .\" Modified 1996-10-22 by Eric S. Raymond .\" Modified 2004-06-17 by Michael Kerrisk .\" Modified 2005, mtk: added an example program .\" Modified 2008-01-09, mtk: rewrote DESCRIPTION; minor additions .\" to EXAMPLE text. .\" 2008-10-10, mtk: add description of pipe2() .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH pipe 2 "15 czerwca 2024 r." "Linux man\-pages 6.9.1" .SH NAZWA pipe, pipe2 \- tworzy potok .SH BIBLIOTEKA Standardowa biblioteka C (\fIlibc\fP, \fI\-lc\fP) .SH SKŁADNIA .nf \fB#include \fP .P \fBint pipe(int \fP\fIpipefd\fP\fB[2]);\fP .P \fB#define _GNU_SOURCE\fP /* Zob. feature_test_macros(7) */ \fB#include \fP /* Definicja stałych \fBO_*\fP */ \fB#include \fP .P \fBint pipe2(int \fP\fIpipefd\fP\fB[2], int \fP\fIflags\fP\fB);\fP .P /* Na Alpha, IA\-64, MIPS, SuperH i SPARC/SPARC64, pipe() ma poniższy prototyp; zob. WERSJE */ .P \fB#include \fP .P \fBstruct fd_pair {\fP \fBlong fd[2];\fP \fB};\fP \fBstruct fd_pair pipe(void);\fP .fi .SH OPIS \fBpipe\fP() tworzy potok, jednokierunkowy kanał danych, służący do komunikacji między procesami. Tablica \fIpipefd\fP służy do zwrócenia dwóch deskryptorów pliku odnoszących się do końców potoku. \fIpipefd[0]\fP odnosi się do końca do odczytu. \fIpipefd[1]\fP odnosi się do końca do zapisu. Dane zapisywane do końca do zapisu potoku są buforowane przez jądro, do momentu ich odczytania z końca do odczytu potoku. Więcej szczegółów opisano w podręczniku \fBpipe\fP(7). .P Jeśli \fIflags\fP ma wartość 0, to \fBpipe2\fP() jest równoważne \fBpipe\fP(). We \fIflags\fP można określić sumę bitową (OR) poniższych wartości, aby uzyskać odmienne zachowanie: .TP \fBO_CLOEXEC\fP Ustawia znacznik zamknij\-przy\-wykonaniu (close\-on\-exec; \fBFD_CLOEXEC\fP) na dwóch nowych deskryptorach pliku. Powody, dla których może być to przydatne, wskazano w opisie tego samego znacznika w podręczniku \fBopen\fP(2). .TP \fBO_DIRECT\fP (od Linuksa 3.4) .\" commit 9883035ae7edef3ec62ad215611cb8e17d6a1a5d Tworzy potok, który przeprowadza wejście/wyjście w trybie \[Bq]pakietowym\[rq]. Każdy zapis (\fBwrite\fP(2)) do potoku jest traktowany jako oddzielny pakiet, a odczyt (\fBread\fP(2)) z potoku odczyta jednocześnie pojedynczy pakiet. Proszę zauważyć, że: .RS .IP \[bu] 3 Zapis więcej niż \fBPIPE_BUF\fP bajtów (zob. \fBpipe\fP(7)) zostanie podzielony na kilka pakietów. Stała \fBPIPE_BUF\fP jest zdefiniowana w \fI\fP. .IP \[bu] Jeśli odczyt (\fBread\fP(2)) określi rozmiar bufora mniejszy niż następny pakiet, to odczytywana jest żądana liczba bajtów, a dodatkowe bajty pakietu są odrzucane. Podanie rozmiar bufora w wielkości \fBPIPE_BUF\fP wystarczy do odczytu nawet największych możliwych pakietów (zob. poprzedni punkt). .IP \[bu] Pakiety zerowej długości nie są obsługiwane (odczyt \[em] \fBread\fP(2), określający rozmiar bufora na zero, będzie instrukcją pustą i zwróci 0). .RE .IP Starsze jądra, które nie obsługują tego znacznika, zasygnalizują ten fakt za pomocą błędu \fBEINVAL\fP. .IP .\" commit 0dbf5f20652108106cb822ad7662c786baaa03ff .\" FIXME . But, it is not possible to specify O_DIRECT when opening a FIFO Od Linuksa 4.5, można zmienić ustawienie \fBO_DIRECT\fP deskryptora pliku potoku za pomocą \fBfcntl\fP(2). .TP \fBO_NONBLOCK\fP Ustawia znacznik stanu pliku \fBO_NONBLOCK\fP na opisach otwartego pliku (OFD), na które wskazują deskryptory nowych plików. Można w ten sposób oszczędzić sobie dodatkowych wywołań do \fBfcntl\fP(2), uzyskując ten sam rezultat. .TP \fBO_NOTIFICATION_PIPE\fP .\" commit c73be61cede5882f9605a852414db559c0ebedfd Od Linuksa 5.8, wokół potoków zbudowano ogólny mechanizm powiadomień, w którym jądro wplata komunikaty z powiadomieniami do potoków otwartych przez przestrzeń użytkownika. Właściciel potoku musi przekazać jądru, jakie źródło zdarzeń ma obserwować oraz jakie filtry mają być zastosowane, w celu wybrania zdarzeń podrzędnych, które mają być umieszczone w potoku. .SH "WARTOŚĆ ZWRACANA" Po pomyślnym zakończeniu zwracane jest zero. W przypadku błędu zwracane jest \-1 i ustawiane \fIerrno\fP wskazując błąd, a \fIpipefd\fP pozostaje bez zmian. .P .\" http://austingroupbugs.net/view.php?id=467 W Linuksie (i innych systemach), \fBpipe\fP() nie modyfikuje \fIpipefd\fP w przypadku błędu. Wymaganie standaryzujące to zachowanie dodano w normie POSIX.1\-2008 TC2. Typowo linuksowe wywołanie systemowe \fBpipe2\fP() również nie modyfikuje \fIpipefd\fP w przypadku błędu. .SH BŁĘDY .TP \fBEFAULT\fP \fIpipefd\fP jest nieprawidłowy. .TP \fBEINVAL\fP (\fBpipe2\fP()) Nieprawidłowa wartość we \fIflags\fP. .TP \fBEMFILE\fP Zostało osiągnięte ograniczenie na liczbę otwartych deskryptorów plików dla procesu. .TP \fBENFILE\fP Zostało osiągnięte systemowe ograniczenie na całkowitą liczbę otwartych plików. .TP \fBENFILE\fP Osiągnięto bezwzględny limit pamięci jaką można przydzielić potokom, a wywołujący nie jest uprzywilejowany, zob. \fBpipe\fP(7). .TP \fBENOPKG\fP (\fBpipe2\fP()) We \fIflags\fP podano \fBO_NOTIFICATION_PIPE\fP, a obsługa powiadomień (\fBCONFIG_WATCH_QUEUE\fP) nie została wbudowana w jądro. .SH WERSJE .\" See http://math-atlas.sourceforge.net/devel/assembly/64.psabi.1.33.ps.Z .\" for example, section 3.2.1 "Registers and the Stack Frame". ABI Systemu V na niektórych architekturach umożliwia używanie więcej niż jednego rejestru, w celu zwracania kilku wartości; wiele architektur (w tym Alpha, IA\-64, MIPS, SuperH i SPARC/SPARC64) (nad)używa tej funkcjonalności w celu implementacji wywołania systemowego \fBpipe\fP() w sposób funkcyjny: wywołanie nie przyjmuje żadnych argumentów i zwraca parę deskryptorów pliku w przypadku powodzenia. Funkcja opakowująca \fBpipe\fP() z glibc radzi sobie z tym w sposób przezroczysty. Podręcznik \fBsyscall\fP(2) zawiera więcej informacji na temat rejestrów używanych do przechowywania drugiego deskryptora pliku. .SH STANDARDY .TP \fBpipe\fP() POSIX.1\-2008. .TP \fBpipe2\fP() Linux. .SH HISTORIA .TP \fBpipe\fP() POSIX.1\-2001. .TP \fBpipe2\fP() Linux 2.6.27, glibc 2.9. .SH PRZYKŁADY .\" fork.2 refers to this example program. Poniższy program tworzy potok, następnie tworzy nowy proces potomny za pomocą \fBfork\fP(2); potomek dziedziczy zduplikowany zestaw deskryptorów pliku, odnoszący się do tego samego potoku. Po wykonaniu \fBfork\fP(2), każdy proces zamyka deskryptory pliku, które nie są potrzebne potokowi (zob. \fBpipe\fP(7)). Rodzic zapisuje następnie łańcuch zawierający argumenty wiersza poleceń programu do potoku, a potomek odczytuje ten łańcuch z potoku bajt po bajcie i wypisuje go na standardowe wyjście. .SS "Kod źródłowy programu" .\" SRC BEGIN (pipe.c) .EX #include #include #include #include #include #include \& int main(int argc, char *argv[]) { int pipefd[2]; char buf; pid_t cpid; \& if (argc != 2) { fprintf(stderr, "Usage: %s \[rs]n", argv[0]); exit(EXIT_FAILURE); } \& if (pipe(pipefd) == \-1) { perror("pipe"); exit(EXIT_FAILURE); } \& cpid = fork(); if (cpid == \-1) { perror("fork"); exit(EXIT_FAILURE); } \& if (cpid == 0) { /* Child reads from pipe */ close(pipefd[1]); /* Close unused write end */ \& while (read(pipefd[0], &buf, 1) > 0) write(STDOUT_FILENO, &buf, 1); \& write(STDOUT_FILENO, "\[rs]n", 1); close(pipefd[0]); _exit(EXIT_SUCCESS); \& } else { /* Parent writes argv[1] to pipe */ close(pipefd[0]); /* Close unused read end */ write(pipefd[1], argv[1], strlen(argv[1])); close(pipefd[1]); /* Reader will see EOF */ wait(NULL); /* Wait for child */ exit(EXIT_SUCCESS); } } .EE .\" SRC END .SH "ZOBACZ TAKŻE" \fBfork\fP(2), \fBread\fP(2), \fBsocketpair\fP(2), \fBsplice\fP(2), \fBtee\fP(2), \fBvmsplice\fP(2), \fBwrite\fP(2), \fBpopen\fP(3), \fBpipe\fP(7) .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 .