Remonter Suivant

1  L'appel système pipe()



Figure 1 : Un tube est associé à deux descripteurs de fichiers


L'appel système
        #include <unistd.h>
        int pipe (ind fd[2]) ; 
crée une structure de communication appelée tube (pipe en anglais).

Il retourne deux descripteurs de fichiers, fd[0] et fd[1].

fd[0] est ouvert en lecture sur le tube et fd[1] est ouvert en écriture sur le tube.

Les valeurs écrites sur fd[1] par la primitive write() pourront être lues sur fd[0] avec la primitive read().

Une opération de lecture (read()) sur un pipe vide pipe() retourne normalement 0 ; -1 en cas d'erreur.
Exercice 1   Le programme de la figure 2 écrit et lit dans un tube.
Question 1   Donnez le résultat de l'exécution de ce programme.
Question 2   Que se passerait-il si le compte de données écrites dans le tube était de 1024 au lieu de 6 (STRLEN) (mais que le compte des données lues reste 6) ?
Question 3   Que se passerait-il si l'ordre des appels systèmes read() et write() était inversé ?

#include <unistd.h>
#include <string.h>
#include <stdio.h>

#define STRING "hello"
#define STRLEN strlen (STRING)

int
main (void)
{
  char buf [1024] ;
  int fds [2] ;
  
  strcpy (buf, STRING) ; 

  pipe (fds) ;

  for (;;) {
    fprintf (stderr, "*") ; 
    write (fds[1], buf, STRLEN) ;
    read (fds[0], buf, STRLEN) ; 
  }
}

Figure 2 : Un processus écrit et lit dans un tube



Remonter Suivant