.\" -*- 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 "30. Juli 2023" "Linux man\-pages 6.05.01" .SH BEZEICHNUNG pipe \- erstellt eine Pipe .SH BIBLIOTHEK Standard\-C\-Bibliothek (\fIlibc\fP, \fI\-lc\fP) .SH ÜBERSICHT .nf \fB#include \fP .PP \fBint pipe(int \fP\fIPipedd\fP\fB[2]);\fP .PP \fB#define _GNU_SOURCE\fP /* siehe feature_test_macros(7) */ \fB#include \fP /* Definition der \fBO_*\fP\-Konstanten */ \fB#include \fP .PP \fBint pipe2(int \fP\fIPipedd\fP\fB[2], int \fP\fISchalter\fP\fB);\fP .PP /* Auf Alpha\-, IA\-64\-, MIPS\-, SuperH\- und SPARC/SPARC64\-Systemen hat pipe() den folgenden Prototyp; siehe VERSIONEN */ .PP \fB#include \fP .PP \fBstruct fd_pair {\fP \fBlong fd[2];\fP \fB};\fP \fBstruct fd_pair pipe(void);\fP .fi .SH BESCHREIBUNG \fBpipe\fP() erzeugt eine Pipe, einen unidirektionalen Datenkanal, der für die Kommunikation zwischen Prozessen verwendet werden kann. Das Feld \fIPipedd\fP wird verwendet, um zwei Dateideskriptoren für die Enden der Pipe zurückzugeben. \fIpipefd[0]\fP bezeichnet das Lese\-Ende der Pipe; \fIpipefd[1]\fP das Schreib\-Ende. In das Schreib\-Ende der Pipe geschriebene Daten werden durch den Kernel gepuffert, bis sie aus dem Lese\-Ende der Pipe gelesen werden (für weitere Details siehe \fBpipe\fP(7)). .PP Falls \fISchalter\fP 0 ist, dann ist \fBpipe2\fP() dasselbe wie \fBpipe\fP(). Um ein anderes Verhalten zu bewirken, können die folgenden Werte in \fISchalter\fP bitweise ODER\-verknüpft werden: .TP \fBO_CLOEXEC\fP Setzt den Schalter »schließen bei Ausführung« (close\-on\-exec, \fBFD_CLOEXEC\fP) für die beiden neuen Dateideskriptoren. Die Beschreibung desselben Schalters in \fBopen\fP(2) begründet, warum das nützlich sein kann. .TP \fBO_DIRECT\fP (seit Linux 3.4) .\" commit 9883035ae7edef3ec62ad215611cb8e17d6a1a5d Erstellt eine Pipe, die E/A im »Paketmodus« durchführt. Jeder \fBwrite\fP(2) in die Pipe wird als separates Paket gehandhabt und \fBread\fP(2)s aus der Pipe werden ein Paket auf einmal lesen. Beachten Sie die folgenden Punkte: .RS .IP \[bu] 3 Schreibvorgänge mit mehr als \fBPIPE_BUF\fP Bytes (siehe \fBpipe\fP(7)) werden in mehrere Pakete aufgeteilt. Die Konstante \fBPIPE_BUF\fP ist in \fI\fP definiert. .IP \[bu] Falls ein \fBread\fP(2) einen Puffer angibt, der kleiner als das nächste Paket ist, dann wird die angeforderte Anzahl an Bytes gelesen und die überzähligen Bytes im Paket werden verworfen. Es reicht aus, die Puffergröße als \fBPIPE_BUF\fP anzugeben, um das größtmögliche Paket zu lesen (siehe hierzu auch den vorherigen Punkt). .IP \[bu] Pakete der Länge null werden nicht unterstützt. (Ein \fBread\fP(2), der eine Pufferlänge der Größe null angibt, ist eine Nullaktion und liefert 0 zurück.) .RE .IP Ältere Kernel, die diesen Schalter nicht unterstützen, zeigen dies mit dem Fehler \fBEINVAL\fP an. .IP .\" commit 0dbf5f20652108106cb822ad7662c786baaa03ff .\" FIXME . But, it is not possible to specify O_DIRECT when opening a FIFO Seit Linux 4.5 ist es möglich, die Einstellung \fBO_DIRECT\fP eines Pipe\-Dateideskriptors mittels \fBfcntl\fP(2) zu ändern. .TP \fBO_NONBLOCK\fP Setzt den Dateistatus\-Schalter \fBO_NONBLOCK\fP für die offene Datei\-Deskription, auf die sich der neue Dateideskriptor bezieht. Die Verwendung dieses Schalters spart zusätzliche Aufrufe von \fBfcntl\fP(2), um das gleiche Ergebnis zu erreichen. .TP \fBO_NOTIFICATION_PIPE\fP .\" commit c73be61cede5882f9605a852414db559c0ebedfd Seit Linux 5.8 ist ein allgemeiner Benachrichtigungsmechanismus oberhalb von Pipes gebaut worden, bei denen der Kernel Benachrichtungsmeldungen in vom Benutzerraum geöffnete Pipes vebindet. Der Eigentümer der Pipe muss dem Kernel mitteilen, welche Ereignisquellen beobachtet werden sollen. Auch können Filter angewendet werden, um auszuwählen, welche Unterereignisse in die Pipe gelegt werden sollen. .SH RÜCKGABEWERT Bei Erfolg wird Null zurückgegeben. Bei einem Fehler wird \-1 zurückgegeben, \fIerrno\fP gesetzt, um den Fehler anzuzeigen und \fIPipedd\fP bleibt unverändert. .PP .\" http://austingroupbugs.net/view.php?id=467 Unter Linux (und anderen Systemen) verändert \fBpipe\fP() beim Fehlschlag \fIPipedd\fP nicht. Eine Anforderung, die dieses Verhalten standardisiert, wurde in POSIX.1\-2008 TC2 hinzugefügt. Ein Linux\-spezifischer Systemaufruf \fBpipe2\fP() ändert entsprechend auch \fIPipedd\fP beim Fehlschlag nicht. .SH FEHLER .TP \fBEFAULT\fP \fIPipedd\fP ist ungültig. .TP \fBEINVAL\fP (\fBpipe2\fP()) ungültiger Wert in \fISchalter\fP .TP \fBEMFILE\fP Die Beschränkung pro Prozess der Anzahl offener Datei\-Deskriptoren wurde erreicht. .TP \fBENFILE\fP Die systemweite Beschränkung für die Gesamtzahl offener Dateien wurde erreicht. .TP \fBENFILE\fP Die benutzerbezogene harte Grenze des Speichers, der für Pipes zugewiesen werden kann, wurde erreicht und der Aufrufende verfügt nicht über Privilegien; siehe \fBpipe\fP(7). .TP \fBENOPKG\fP (\fBpipe2\fP()) \fBO_NOTIFICATION_PIPE\fP wurde in \fISchalter\fP übergeben und die Unterstützung für Benachrichtigungen (\fBCONFIG_WATCH_QUEUE\fP) ist nicht im Kernel einkompiliert. .SH VERSIONEN .\" 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". Das System\-V\-ABI auf einigen Architekturen erlaubt die Verwendung von mehr als einem Register zum Zurückliefern mehrerer Werte; eine Reihe von Architekturen (konkret Alpha, IA\-64, MIPS, SuperH und SPARC/SPARC64) (mis\-)brauchen diese Funktionalität, um den Systemaufruf \fBpipe\fP() auf eine funktionale Weise zu implementieren: der Aufruf akzeptiert keine Argumente und liefert im Erfolgsfall ein Paar von Dateideskriptoren als Rückgabewert zurück. Die Glibc\-Wrapperfunktion \fBpipe\fP() geht damit transparent um. Siehe \fBsyscall\fP(2) für Informationen im Hinblick auf die Register, die zur Speicherung des zweiten Dateideskriptors verwandt werden. .SH STANDARDS .TP \fBpipe\fP() POSIX.1\-2008. .TP \fBpipe2\fP() Linux. .SH GESCHICHTE .TP \fBpipe\fP() POSIX.1\-2001. .TP \fBpipe2\fP() Linux 2.6.27, glibc 2.9. .SH BEISPIELE .\" fork.2 refers to this example program. Das folgende Programm erstellt eine Pipe und erzeugt anschließend mittels \fBfork\fP(2) einen Kindprozess; das Kind erbt einen kopierten Satz von Dateideskriptoren für dieselbe pipeline. Danach schließt jeder Prozess die Dateideskriptoren, die er nicht für die Pipe benötigt (siehe \fBpipe\fP(7)). Der Elternprozess schreibt dann die Zeichenfolge im Befehlszeilen\-Argument in die Pipe. Der Kindprozess liest diese Zeichenfolge byteweise aus der Pipe und gibt sie auf der Standardausgabe aus. .SS Programmquelltext .\" SRC BEGIN (pipe.c) .EX #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 \en", 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) { /* Kindprozess liest aus Pipe */ close(pipefd[1]); /* nicht verwendetes Schreib\-Ende schließen */ \& while (read(pipefd[0], &buf, 1) > 0) write(STDOUT_FILENO, &buf, 1); \& write(STDOUT_FILENO, "\en", 1); close(pipefd[0]); _exit(EXIT_SUCCESS); \& } else { /* Elternprozess schreibt argv[1] in die Pipe */ close(pipefd[0]); /* Nicht verwendetes Lese\-Ende schließen */ write(pipefd[1], argv[1], strlen(argv[1])); close(pipefd[1]); /* der Lesende wird EOF sehen */ wait(NULL); /* Auf "das Kind" warten */ exit(EXIT_SUCCESS); } } .EE .\" SRC END .SH "SIEHE AUCH" \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 ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Lars J. Brandt , Martin Eberhard Schauer , Mario Blättermann und Helge Kreutzmann erstellt. .PP Diese Übersetzung ist Freie Dokumentation; lesen Sie die .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. .PP Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die .MT debian-l10n-german@lists.debian.org Mailingliste der Übersetzer .ME .