12.07.2015 Views

Généralités sur les systèmes d'exploitation - Site personnel de ...

Généralités sur les systèmes d'exploitation - Site personnel de ...

Généralités sur les systèmes d'exploitation - Site personnel de ...

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

LO14 : Université Technologique <strong>de</strong> TroyesChapitre 4 : Communication entre processus locaux et distants : réseauxCette fin du XX e siècle a vu le développement spectaculaire <strong>sur</strong> toute la planète <strong>de</strong>s réseaux <strong>de</strong>communication : téléphone, radio, télex, télévision, réseau informatique, télévision par câble. L'accèsimmédiat à une technologie avancée est une <strong>de</strong>s caractéristiques majeure <strong>de</strong> nos sociétés à technologieavancée.I) Communication inter processus1°) Communication locale entre processus1 - a) La communication entre père et fils par tubes (pipe)Un tube (pipe) est utilisé pour relier un flux <strong>de</strong> données d'un processus à un autre. Le plus souvent on reliela sortie d'un processus à l'entrée d'un autre.• Un processus hérite <strong>de</strong> son père <strong>les</strong> <strong>de</strong>scripteurs <strong>de</strong> tubes.• Un tube est composé <strong>de</strong> <strong>de</strong>ux entrées (lecture / écriture).• Chaque entrée est FIFO.• Création d'un tube : int pipe(p) avec int p[2].• p[0] = accès en lecture ; p[1] = accès en écriture.Pour le plus simple on utilise :#inclu<strong>de</strong> FILE *popen(const char *comman<strong>de</strong>, const char *mo<strong>de</strong>_open);int pclose(FILE *flux_a_fermer);Cette technique est facile à utiliser pour <strong>de</strong>s échanges <strong>de</strong> données entre programmes parents. Si ce n'estpas le cas il faut utiliser <strong>de</strong>s tubes nommés (named pipes ou FIFO).1 - b) La communication par tubes nommésUn tube nommé est un fichier spécial créé avec la comman<strong>de</strong> mknod ou mkfifo.-rw-r----- 1 billard telecom 15001 fév 4 13:59 fichier_normalprw-r----- 1 billard telecom 0 fév 4 13:58 mon_tube-rw-r----- 1 billard telecom 45876 fév 4 13:59 un_autre_fichierLa taille <strong>de</strong> mon_tube = 0, sauf lors <strong>de</strong> l'utilisation du tube.Le tube s'utilise comme un fichier normal avec <strong>les</strong> primitives open, read, write, close.On utilise pour cela une comman<strong>de</strong> : mkfifo nomfichier ou dans <strong>les</strong> programmes qui utilisent :#inclu<strong>de</strong> #inclu<strong>de</strong> int mkfifo(const char *nomfichier, mo<strong>de</strong>_t mo<strong>de</strong>);int mknod(const char *nomfichier,mo<strong>de</strong>_t mo<strong>de</strong> | S_IFIFO, <strong>de</strong>v_t)0);Si l'on exécute le co<strong>de</strong> suivant :#inclu<strong>de</strong> ....main(){int res = mkfifo(« /temp/fifo1 »,0777);if (res == 0) printf(« FOFO créé\n »);}Une comman<strong>de</strong> du type : ls -l /tmp/fifo1prwxr-rx-x 1 toto users 0 Jun 5 19:00 /tmp/fifo1La première lettre p indique un tube (pipe).L'ouverture se fait avec open, l'écriture avec write, la lecture avec read.2°) Lancement d'un processus à distanceLe client lance le serveur. On peut prendre simplement <strong>les</strong> <strong>de</strong>ux programmes :/* client.c */#inclu<strong>de</strong> 19 /98 S. Moutou : Cours

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!