Les communications entre processus
But : Nous allons étudier ici comment un processus peut communiquer avec d’autre processus
I. Création et utilisation d’un Pipe * Définition :
Un Pipe ou tube est un fichier spécial et éphémère permettant la communication entre deux processus de même filiation.
Remarque : Le fichier n’apparait pas dans l’explorateur de fichier (il n’a pas de chemin courant) * Primitive de pipe() :
#include
int pipe (int p[2]) * Création d’un pipe
Int resultat ;
Int tube[2] ; resultat = pipe(tube) ; if (resultat < 0)
{
//traitement d’erreur
}
* TP :
Etape 1 : étude de la commande ps –e|wc –l
La commande ps –e nous donne dans un terminal les caractéristiques des processus :
* PID, identificateur d’un processus. * TTY, indique à quel port de terminal est associé le processus. * TIME, indique depuis combien de temps le processus utilise les ressources du microprocesseur * CMD, commande qui précise la commande dont l’état est décrit par PID, TTY, STAT, et TIME.
La commande ps –e permet de voir tous les processus sur le système.
La commande wc –l nous indique les nouvelles lignes d’impression.
La commande ps -e|wc –l sert à connaître le nombre de ligne d’impression qu'on a après l'exécution de la commande ps -e. Le signe | « pipe » permet d'exécuter une commande en combinant les commande de chaque coter du pipe.
Etape 2 : Communication entre 2 processus – code /********************************************** Picol 19/11/10 **********************************************/#include #include #include #include #include #include #include using namespace std;int main (void){ int PID1; int PID2; int PPID; int Statusp; int nbo_bus; int pfd[2]; if (pipe(pfd) == -1) //création du pipe { printf("Erreur creation pipe\n"); exit(-1); } PID1 = fork(); //Création 1er fils if (PID1 == 0) // 1er fils { close(pfd[0]); char rep[100];