.\" -*- coding: UTF-8 -*- .\" Hey Emacs! This file is -*- nroff -*- source. .\" .\" Copyright (C) 2005, 2008, Michael Kerrisk .\" (A few fragments remain from an earlier (1992) version by .\" Drew Eckhardt .) .\" .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" .\" 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 "14. Februar 2012" Linux Linux\-Programmierhandbuch .SH BEZEICHNUNG pipe \- erstellt eine Pipeline .SH ÜBERSICHT .nf \fB#include \fP .sp \fBint pipe(int \fP\fIpipefd\fP\fB[2]);\fP .sp \fB#define _GNU_SOURCE\fP /* siehe feature_test_macros(7) */ \fB#include \fP /* Definitionen für O_*\-Konstanten beschaffen */ \fB#include \fP .sp \fBint pipe2(int \fP\fIpipefd\fP\fB[2], int \fP\fIflags\fP\fB);\fP .fi .SH BESCHREIBUNG \fBpipe\fP() erzeugt eine Pipeline, einen unidirektionalen Datenkanal, der für die Kommunikation zwischen Prozessen verwendet werden kann. Das Feld \fIpipefd\fP wird verwendet, um zwei Dateideskriptoren für die Enden der Pipeline zurückzugeben. \fIpipefd[0]\fP bezeichnet das Lese\-Ende der Pipeline; \fIpipefd[1]\fP das Schreib\-Ende. In das Schreib\-Ende der Pipeline geschriebene Daten werden durch den Kernel gepuffert, bis sie aus dem Lese\-Ende der Pipeline gelesen werden (für weitere Details siehe \fBpipe\fP(7)). Falls \fIflags\fP 0 ist, dann ist \fBpipe2\fP() dasselbe wie \fBpipe\fP(). Um ein anderes Verhalten zu bewirken, können die folgenden Werte in \fIflags\fP bitweise ODER\-verknüpft werden: .TP 12 \fBO_NONBLOCK\fP setzt den Dateistatus\-Schalter \fBO_NONBLOCK\fP für einen der beiden offenen Dateideskriptoren. Die Verwendung dieses Schalters spart zusätzliche Aufrufe von \fBfcntl\fP(2), um das gleiche Ergebnis zu erreichen. .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. .SH RÜCKGABEWERT Bei Erfolg wird Null zurückgegeben. Bei einem Fehler wird \-1 zurückgegeben und \fIerrno\fP entsprechend gesetzt. .SH FEHLER .TP \fBEFAULT\fP \fIpipefd\fP ist ungültig. .TP \fBEINVAL\fP (\fBpipe2\fP()) ungültiger Wert in \fIflags\fP .TP \fBEMFILE\fP Der Prozess benutzt zu viele Dateideskriptoren. .TP \fBENFILE\fP Der Systemschwellwert für die Anzahl geöffneter Dateien ist erreicht. .SH VERSIONEN \fBpipe2\fP() wurde zu Linux in der Version 2.6.27 hinzugefügt; Glibc unterstützt die Funktion seit Version 2.9. .SH "KONFORM ZU" \fBpipe\fP(): POSIX.1\-2001. \fBpipe2\fP() ist Linux\-spezifisch. .SH BEISPIEL .\" fork.2 refers to this example program. Das folgende Programm erstellt eine Pipeline 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 Deskriptoren, die er nicht für die Pipeline benötigt (siehe \fBpipe\fP(7)). Der erzeugende Prozess schreibt dann die Zeichenfolge im Befehlszeilen\-Argument in die Pipeline. Der Kindprozess liest diese Zeichenfolge byteweise aus der Pipeline und gibt sie auf der Standardausgabe aus. .nf #include #include #include #include #include main(int argc, char *argv[]) { int pipefd[2]; pid_t cpid; char buf; if (argc != 2) { fprintf(stderr, "Aufruf: %s \en", argv[0]); exit(EXIT_FAILURE); } if (pipe(pipefd) == \-1) { perror("Pipeline"); /* Systemfehlermeldung ausgeben */ exit(EXIT_FAILURE); } cpid = fork(); if (cpid == \-1) { perror("Aufruf von fork(2)"); exit(EXIT_FAILURE); } if (cpid == 0) { /* Kindprozess liest aus Pipeline */ 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 { /* Erzeuger schreibt argv[1] in die Pipeline */ 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); } } .fi .SH "SIEHE AUCH" \fBfork\fP(2), \fBread\fP(2), \fBsocketpair\fP(2), \fBwrite\fP(2), \fBpopen\fP(3), \fBpipe\fP(7) .SH KOLOPHON Diese Seite ist Teil der Veröffentlichung 3.42 des Projekts Linux\-\fIman\-pages\fP. Eine Beschreibung des Projekts und Informationen, wie Fehler gemeldet werden können, finden sich unter http://www.kernel.org/doc/man\-pages/. .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Lars J. Brandt und Martin Eberhard Schauer erstellt. Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an .