0% ont trouvé ce document utile (0 vote)
121 vues2 pages

Communication par Tubes Nommés

Le document décrit deux exemples d'utilisation de tubes nommés pour la communication inter-processus. Le premier exemple montre un processus écrivant une chaîne de caractères dans un tube et un autre processus la lisant et l'affichant en majuscules. Le deuxième exemple illustre la communication d'un entier entre deux processus via un tube nommé.

Transféré par

sama
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
121 vues2 pages

Communication par Tubes Nommés

Le document décrit deux exemples d'utilisation de tubes nommés pour la communication inter-processus. Le premier exemple montre un processus écrivant une chaîne de caractères dans un tube et un autre processus la lisant et l'affichant en majuscules. Le deuxième exemple illustre la communication d'un entier entre deux processus via un tube nommé.

Transféré par

sama
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

TD Programmation Système

Série 3 suite : Tubes Nommés


Correction

Exercice 1
P1.c P2.c
// le processus P1 récupère une // le processus P2 lit dans le
chaine de caractère en paramètre tube nommé caractère par caractère
et l'écrit dans le tube et l'affiche en majuscule

#include <sys/types.h> #include <sys/types.h>


#include <sys/stat.h> #include <sys/stat.h>
#include <fcntl.h> #include <fcntl.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <stdlib.h>
#include <stdlib.h>
main (int argc , char* argv[])
{int fd;
char c;
main (int argc , char* argv[]) fd=open("tube",O_RDONLY);
{ int i,fd;
if(fd==-1)
{
if( mkfifo("tube",0666) ==-1) perror("open");
{perror("mkfifo"), exit(0);
exit(0);} }

fd=open("tube",O_WRONLY); while (read(fd,&c,1)!=0)


if(fd==-1) printf("%c",toupper(c));
{perror("open"), printf("\n");
exit(0); } close(fd);

write(fd,argv[1],strlen(argv[1]) }
*sizeof(char));
close(fd);
}
Exercice 2 : Communication entre deux processus
P1.c P2.c
// le processus P1 affiche // le processus P2lit la valeur
2 4 6 8 10 communiquée par le processus P1
et communique la dernière dans le tube nommé et affiche
valeur au processus P2 en 13 16 19 22 25
l'écrivant dans un tube nommé en incrémentant la valeur lue
de 3 jusqu'à un multiple de 5

#include <sys/types.h> #include <sys/types.h>


#include <sys/stat.h> #include <sys/stat.h>
#include <fcntl.h> #include <fcntl.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <stdlib.h>
#include <stdlib.h>
main (int argc , char* argv[])
main (int argc , char* argv[]) {int fd, n;
{ int fd, n=0;
fd=open("tube",O_RDONLY);
if( mkfifo("tube",0666) ==-1)
{perror("mkfifo"), if(fd==-1)
exit(0);} {perror("open"),
exit(0);
fd=open("tube",O_WRONLY); }
if(fd==-1)
{perror("open"), read(fd,&n,sizeof(int));
exit(0); } do
{ n=n+3;
do printf(" %d",n);
{n=n+2; }while(n%5!=0);
printf(" %d",n);
}while(n%5!=0); printf("\n");
printf("\n");
close(fd);
write(fd,&n,sizeof(int));
close(fd);

}
}

Vous aimerez peut-être aussi