Page 1 F. Nolot Licence d`informatique 2003

Transcription

Page 1 F. Nolot Licence d`informatique 2003
Université de Reims Champagne-Ardenne
U niversité de Reims Champagne-Ardenne
Principe
Moyen de communication inter-processus
Les Tubes
Un processus écrit des données dans le tube et l'autre les lit
Utilisation de l'appel système
int pipe (int descripteur[2]);
En cas d'échec, retourne -1
Sinon retourne les descripteurs des 2 extrémités du tubes en
argument
Le descripteur d'indice 0 est la sortie du tube, ouvert en lecture seule
Le descripteur d'indice 1 est l'entrée du tube, ouvert en écriture seule
F. Nolot
Licence d'informatique 2003-2004
1
Université de Reims Champagne-Ardenne
F. Nolot
Licence d'informatique 2003-2004
U niversité de Reims Champagne-Ardenne
Lecture / écriture
Communication entre 2 processus
Elles se font par les commandes
et Utilisation de l'appel système fork()
Si la communication va du père vers le fils
int read (int fd, char *tamp, int n);
Le père ferme son descripteur de sortie de tube
int write (int fd, char *tamp,int n);
Le fils ferme son descripteur d'entrée de tube
fd : descripteur du flux
Fermeture d'un descripteur par close()
tamp : endroit où vont être lu ou écrite les données
close (int fd)
n : le nombre d'octets à transférer
fd : descripteur du flux
Retourne le nombre d'octets transférés et -1 en cas
d'erreur
F. Nolot
2
Licence d'informatique 2003-2004
3
Université de Reims Champagne-Ardenne
F. Nolot
Licence d'informatique 2003-2004
4
U niversité de Reims Champagne-Ardenne
Problème des tubes
Les tubes nommés
Comment faire communiquer 2 processus
quelconques ?
Un tube nommé possède un nom dans le système de
fichiers
Avec les tubes, nécessité que les processus aient un
ancêtre commun (le créateur du tube)
Le noeud du système de fichiers représentant le tube
nommé est du type fifo
Sa création se fait par la commande mkfifo()
La solution : les tubes nommés
int mkfifo (char *nom, mode_t mode)
nom
: nom du tube nommé
mode : idem que pour la commande open
Retourne 0 si la création a réussi et -1 en cas d'erreur
F. Nolot
Licence d'informatique 2003-2004
5
F. Nolot
Licence d'informatique 2003-2004
6
Université de Reims Champagne-Ardenne
U niversité de Reims Champagne-Ardenne
Ouverture d'un tube nommé
Utilisation de la commande
Fermeture d'un tube nommé
Utilisation de la commande close()
int open(char *name, int flags, 0)
int close(int fd)
name : nom du tube à ouvrir
fd : descripteur du flux
flags : mode d'ouverture
Retourne 0 en cas de succès et -1 sinon
O_RDONLY : ouvre uniquement en lecture
Suppression d'un tube nommé
O_WRONLY : ouvre uniquement en écriture
O_RDWR
int unlink(const char *pathname)
: ouvre en lecture et écriture
Retourne un descripteur du flux ouvert ou -1 en cas
d'erreur
F. Nolot
Licence d'informatique 2003-2004
7
F. Nolot
Licence d'informatique 2003-2004
8