C Programmation

Comment utiliser la fonction pipe en langage C

Comment utiliser la fonction pipe en langage C

Un tuyau est un moyen de communication entre les processus. Un processus écrit des données dans le tube et un autre processus lit les données du tube. Dans cet article, nous verrons comment la fonction pipe() est utilisée pour implémenter le concept en langage C.

À propos du tuyau

Dans le tuyau, les données sont conservées dans un ordre FIFO, ce qui signifie écrire les données à une extrémité du tuyau de manière séquentielle et lire les données à partir d'une autre extrémité du tuyau dans le même ordre séquentiel.

Si un processus lit à partir du tube, mais qu'aucun autre processus n'a encore écrit dans le tube, read renvoie la fin du fichier. Si un processus veut écrire dans un tube, mais qu'il n'y a pas d'autre processus attaché au tube pour la lecture, alors il s'agit d'une condition d'erreur et le tube génère un signal SIGPIPE.

En tête de fichier

#inclure

Syntaxe

int pipe (int files[2])

Arguments

Cette fonction prend un seul argument, un tableau de deux entiers (fichiers). fichiers[0] est utilisé pour la lecture du tuyau, et classées[1] est utilisé pour écrire sur le tuyau. Le processus qui veut lire à partir du tuyau doit se fermer classées[1], et le processus qui veut écrire dans le tube devrait se fermer fichiers[0].  Si les extrémités inutiles du tuyau ne sont pas explicitement fermées, la fin de fichier (EOF) ne sera jamais renvoyée.

Valeurs de retour

En cas de succès, le tuyau() renvoie 0, en cas d'échec la fonction renvoie -1.

En images, on peut représenter le tuyau() fonctionner comme suit :

Voici quelques exemples illustrant comment utiliser la fonction pipe en langage C.

Exemple 1

Dans cet exemple, nous allons voir comment fonctionne la fonction pipe. Bien que l'utilisation d'un tuyau dans un seul processus ne soit pas très utile, mais nous allons nous faire une idée.

// Exemple 1.c
#inclure
#inclure
#inclure
#inclure
int main()

entier n;
int files[2];
tampon de caractères [1025] ;
char *message = "Bonjour, Monde!";
pipe(filedes);
write(filedes[1], message, strlen(message));
if ((n = read ( filedes[0], buffer, 1024 ) ) >= 0)
tampon[n] = 0 ; //termine la chaîne
printf("lire %d octets depuis le tube : "%s"\n", n, buffer);

autre
perror("lire");
sortie(0);

Ici, nous avons d'abord créé un tuyau en utilisant tuyau() fonction puis écrite dans le tuyau en utilisant fils[1] finir. Ensuite, les données ont été lues à l'aide de l'autre extrémité du tuyau, qui est fichiers[0]. Pour lire et écrire dans le fichier, nous avions l'habitude de lis() et écrivez() les fonctions.

Exemple2

Dans cet exemple, nous verrons comment les processus parents et enfants communiquent à l'aide du tube.

// Exemple2.c
#inclure
#inclure
#inclure
#inclure
#inclure
int main()

int files[2], noctets;
pid_t childpid;
char string[] = "Bonjour, monde!\n";
char readbuffer[80];
pipe(filedes);
if((childpid = fork()) == -1)

perror("fourchette");
sortie(1);

if(childpid == 0)

close(filedes[0]);//Le processus enfant n'a pas besoin de cette extrémité du tube
/* Envoie "string" par le côté sortie du tube */
écrire(filedes[1], chaîne, (strlen(chaîne)+1));
sortie(0);

autre

/* Le processus parent ferme le côté sortie du tube */
close(filedes[1]);//Le processus parent n'a pas besoin de cette extrémité du tuyau
/* Lire une chaîne à partir du tube */
nbytes = read(filedes[0], readbuffer, sizeof(readbuffer));
printf("Lire la chaîne : %s", readbuffer);

retour(0);

Tout d'abord, un tube a été créé à l'aide de la fonction pipe, puis un processus enfant a été fork. Ensuite, le processus enfant ferme la fin de lecture et écrit dans le tube. Le processus parent ferme la fin d'écriture et lit à partir du tube et l'affiche. Ici, le flux de données n'est qu'à sens unique, de l'enfant au parent.

Conclusion:

tuyau() est un puissant appel système sous Linux. Dans cet article, nous n'avons vu qu'un flux de données unidirectionnel, un processus écrit et un autre processus lit, créant deux canaux, nous pouvons également obtenir un flux de données bidirectionnel.

Installez le dernier émulateur Dolphin pour Gamecube et Wii sur Linux
L'émulateur Dolphin vous permet de jouer aux jeux Gamecube et Wii de votre choix sur des ordinateurs personnels Linux (PC). Étant un émulateur de jeu...
Comment utiliser le moteur de triche GameConqueror sous Linux
L'article couvre un guide sur l'utilisation du moteur de triche GameConqueror sous Linux. De nombreux utilisateurs qui jouent à des jeux sur Windows u...
Meilleurs émulateurs de console de jeu pour Linux
Cet article répertorie les logiciels d'émulation de console de jeu populaires disponibles pour Linux. L'émulation est une couche de compatibilité logi...