Provided by:
manpages-fr-dev_3.27fr1.4-1_all 
NOM
pipe, pipe2 - Creer un tube
SYNOPSIS
#include <unistd.h>
int pipe(int pipefd[2]);
#define _GNU_SOURCE /* Consultez feature_test_macros(7) */
#include <unistd.h>
int pipe2(int pipefd[2], int flags);
DESCRIPTION
pipe() cree un tube, un canal unidirectionnel de donnees qui peut etre
utilise pour la communication entre processus. Le tableau pipefd est
utilise pour renvoye deux descripteurs de fichier faisant reference aux
extremites du tube. pipefd[0] fait reference a l'extremite de lecture
du tube. pipefd[1] fait reference a l'extremite d'ecriture du tube. Les
donnees ecrites sur l'extremite d'ecriture du tube sont mises en
memoire tampon par le noyau jusqu'a ce qu'elles soient lues sur
l'extremite de lecture du tube. Pour plus de details, consultez
pipe(7).
Si flags est nul, alors pipe2() est identique a pipe(). Les valeurs
suivantes peuvent etre incluses a l'aide d'un OU binaire dans flags
pour obtenir differents comportements :
O_NONBLOCK Placer l'attribut d'etat de fichier O_NONBLOCK sur les deux
nouveaux descripteurs de fichiers ouverts. Utiliser cet
attribut economise des appels supplementaires a fcntl(2)
pour obtenir le meme resultat.
O_CLOEXEC Placer l'attribut << close-on-exec >> (FD_CLOEXEC) sur les
deux nouveaux descripteurs de fichiers. Consultez la
description de cet attribut dans open(2) pour savoir
pourquoi ca peut etre utile.
VALEUR RENVOY'EE
S'il reussit, cet appel systeme renvoie 0. S'il echoue, il renvoie -1
et remplit errno en consequence.
ERREURS
EFAULT pipefd est invalide.
EINVAL (pipe2()) Valeur incorrecte dans flags.
EMFILE Trop de descripteurs de fichier sont utilises par le processus.
ENFILE La limite du nombre total de fichiers ouverts sur le systeme a
ete atteinte.
VERSIONS
pipe2() a ete ajoute a Linux dans la version 2.6.27 ; sa prise en
charge par la glibc est disponible depuis la version 2.9.
CONFORMIT'E
pipe() : POSIX.1-2001.
pipe2() est specifique a Linux.
EXEMPLE
Le programme suivant cree un tube, puis invoque fork(2) pour creer un
processus fils ; le fils herite d'un jeu de descripteurs de fichier qui
se rapportent au meme tube. Apres le fork(2), chaque processus ferme
les descripteurs dont il n'a pas besoin pour le tube (consultez
pipe(7)). Le pere ecrit alors la chaine contenue dans l'argument de
ligne de commande du programme dans le tube, et le fils lit cette
chaine un octet a la fois dans le tube, et l'affiche sur la sortie
standard.
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int
main(int argc, char *argv[])
{
int pipefd[2];
pid_t cpid;
char buf;
if (argc != 2) {
fprintf(stderr, "Usage: %s <string>\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) { /* Le fils lit dans le tube */
close(pipefd[1]); /* Fermeture du descripteur en ecriture inutilise */
while (read(pipefd[0], &buf, 1) > 0)
write(STDOUT_FILENO, &buf, 1);
write(STDOUT_FILENO, "\n", 1);
close(pipefd[0]);
_exit(EXIT_SUCCESS);
} else { /* Le pere ecrit argv[1] dans le tube */
close(pipefd[0]); /* Fermeture du descripteur en lecture inutilise*/
write(pipefd[1], argv[1], strlen(argv[1]));
close(pipefd[1]); /* Le lecteur verra EOF */
wait(NULL); /* Attente du fils */
exit(EXIT_SUCCESS);
}
}
VOIR AUSSI
fork(2), read(2), socketpair(2), write(2), popen(3), pipe(7)
COLOPHON
Cette page fait partie de la publication 3.27 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe de traduction
francophone au sein du projet perkamon
<URL:http://perkamon.alioth.debian.org/>.
Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003),
Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Julien
Cristau et l'equipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.