Chapitre 3 Les Tubes
Chapitre 3 Les Tubes
Chapitre 3 Les Tubes
1
Programmation Système et Réseau
Chapitre 3
Communication Inter
Processus
2
PLAN
• Introduction
•Les signaux
3
Introduction
4
Introduction
¾ Les signaux
¾ Les messages.
5
Introduction
Les threads (POSIX) d’un processus partagent :
6
Comment ça marche?
7
Les tubes de communications unix
Définition:
Deux types :
8
Les tubes Anonymes : Création
Un tube de communication est créé par l’appel système :
int pipe(int p[2])
9
Les tubes Anonymes : Création
10
Les tubes Anonymes : Création
Communications unidirectionnels:
11
Les tubes Anonymes
Communications unidirectionnels:
12
Les tubes Anonymes
Communications unidirectionnels:
Scénario:
Père : Crée un tube.
Père : Crée un ou plusieurs fils
Père ÆLecteur
Fils ÆEcrivain
Ecrivain : ferme le fichier non utilisé : de lecture.
Lecteur : Ferme le fichier non utilisé : d’écriture
14
Les tubes Anonymes
Communications unidirectionnels:
Exemple 1:
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define R 0
#define W 1
int main()
{
int pid;
int fd[2];
char message[100];
int Nboctects;
char* phrase="VOICI MON MESSAGE POUR TOI PERE";
system("clear");
15
Les tubes Anonymes
Communications unidirectionnels:
Exemple :
printf("_____________________________________________\n");
printf("\t\tProcessus Courant:: %d\n",(int)getpid());
printf("_____________________________________________\n");
if (pipe(fd) == ‐1)
{
perror ("Creation du pipe a échoué ");
exit(1);
}
pid=fork();
if(!pid)
{
close(fd[R]);//fermeture du fichier de lecture par le fils
printf("\t\t\t\t\t\t+++++++++++++++++++++++++++++++++++++++\e[m\n");
printf("\t\t\t\t\t\t\t \e[29m Processus FILS:: %d\n",(int)getpid());
printf("\t\t\t\t\t\t+++++++++++++++++++++++++++++++++++++++\n");
printf("\t\t\t\t\t\t \e[29mProcessus FILS::PERE JE T'ENVOIE UN MESSAGE\n");
16
Les tubes Anonymes
Communications unidirectionnels:
Exemple :
if (write(fd[W],phrase,strlen(phrase)+1)== ‐1)
{
perror("write : Ecriture dans le pipe à échoué ");
exit(4);
}
17
Les tubes Anonymes
Communications unidirectionnels:
Exemple :
if (( Nboctects = read (fd[0],message, 100)) == ‐1)
{
perror ("read : Lecture échoué ");
exit(5);
}
message[Nboctects]='\0';
printf("%c[%d;%dmMESSAGE RECU :: nboctets = %d Message=
%s%c[%dm\n",27,1,33,Nboctects,message,27,0);
close(fd[R]);//fermeture du fichier d'écriture par le pere
return 0;
18
Les tubes Anonymes
Communications unidirectionnels:
Exemple 2:
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
if(pipe(tube)==‐1)
#include<stdio.h>
{
#include<string.h>
perror("Création pipe : ");
#include<stdlib.h>
exit(EXIT_FAILURE);
#include<assert.h>
}
#define R 0
#define W 1
system("clear");
int main(int argc,char* argv[])
{
printf("_______________________________\n");
int tube[2];
printf("\t\tProcessus Courant:: %d\n",(int)getpid());
int pid;
printf("_______________________________\n");
char buf;
assert(argc==2);
19
Les tubes Anonymes
Communications unidirectionnels:
Exemple 2:
pid=fork();
//PERE
if(pid==‐1) close(tube[R]);
{ write(tube[W],argv[1],strlen(argv[1])+1);
perror("Fork echec"); close(tube[W]);
exit(EXIT_FAILURE); printf("%c[%d;%dm J'attends la terminaison du
} fils%c[%dm\n",27,1,33,27,0);
wait(NULL);
if(!pid)//FILS printf("%c[%d;%dm BYE %c[%dm\n",27,1,33,27,0);
{
close(tube[W]); return 0;
while(read(tube[R],&buf,1) > 0) }
{
sleep(1);
write(STDOUT_FILENO,&buf,1);
}
write(STDOUT_FILENO,"\n",1);
close(tube[R]);
exit(EXIT_SUCCESS); 20
}
Les tubes Anonymes
Communications unidirectionnels:
Redirection des entrées standards et des sorties standards
La duplication de descripteur permet à un processus de créer
un nouveau descripteur (dans la table de descripteur )
synonyme d’un descripteur déjà existant.
#include<unistd.h>
int dup(int desc);
int dup2(int desc1, int desc2);
22
who wc
Les tubes Anonymes
Communications unidirectionnels:
Exemple 3:
return 0;
}
24
Les tubes Anonymes
Communications unidirectionnels:
EXERCICE
On veut établir, en utilisant les tubes nommés, une
communication de type anneau unidirectionnel entre trois
processus fils. Pour ce faire, la sortie standard de l’un doit être
redirigée vers l’entrée standard d’un autre.
25
Les tubes Anonymes
Communications unidirectionnels:
EXERCICE
26
Les tubes Anonymes
Communications unidirectionnels:
EXERCICE
27
Les tubes Anonymes
Communications unidirectionnels:
EXERCICE
28