[C/Unix] Processus en C

Processus en C [C/Unix] - Programmation

Marsh Posté le 23-12-2001 à 22:49:47    

Bonjour,
 
comment fait on pour faire communiquer 2 processus entre-eux (genre un pipe)??
 
merci

Reply

Marsh Posté le 23-12-2001 à 22:49:47   

Reply

Marsh Posté le 23-12-2001 à 23:59:31    

Ben oui, un pipe c'est pas mal.
Tu as la fonction 'pipe' qui te donne les 2 descripteurs correspondants (lecture et ecriture).

Reply

Marsh Posté le 24-12-2001 à 09:43:49    

la commande pipe te renvoie deux descripteurs de fichiers, l'un pour le processus qui envoyer les données dans le tube, l'autre descripteur pour le processus qui les lira.
Comme ce sont des descripteurs de fichiers, tu utilises pour lire et écrire les fonctions standards "read" et "write".
Afin que tes deux processus  partagent le même tube, il faut utiliser la commande pipe AVANT d'utiliser la commande fork.
 
exemple :
 
main()
{
   int tab[2]; // tableau pour les descripteurs créés par "pipe"
   pid_t fils;
 
   pipe(tab);
 
   /* a partir d'ici, le descripteur tab[0] sera utilisé pour lire le tube, et le descripteur tab[1] sera utilisé pour écrire dedans. */
 
   fils=fork(); // création d'un processus fils.
 
   /* Normalement, pour un fonctionnement optimal, le processus fils est celui qui écrit les infos dans le pipe (producteur) et le processus père les reçoit (consommateur). */
 
   if( fils==(pid_t)0)
   {
      // début programme processus fils
      ...      
      write(tab[1], data); // écriture d'infos dans le pipe
      ...
      // fin programme processus fils
      exit(0);
   }
 
   else
   {
      // poursuite du processus père
      ...
      read(tab[0], data); // lecture des infos du pipe
      ...
   }
}

Reply

Marsh Posté le 24-12-2001 à 09:44:45    

Ah oui, j'oubliais : les pipes permettent de faire de la communication inter-process sur une seule et même machine. Pour faire de la communication via le réseau, il fautdrait utiliser les sockets...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed