Objectif:
Communiquer des données entre processus nécessairement apparentés.
Des processus (écrivains) déposent des données dans
le tube, d'autres (lecteurs) lisent dans le tube s'ils ont le droit en lecture.
Forme des données:
Suite d'octets sans structure.
Limitations:A partir
des données, pas d'identification des processus écrivains
ou lecteurs, ni de la taille des messages envoyés. Le tube est une
zone de données en mémoire centrale (4 Koctets sous Linux).
Création:
Commande | ou fonction c (appel
système) int pipe(int filesdes[2]). filesdes est un tableau
de deux descripteurs, un pour écrire (filesdes[1])
et l'autre pour lire ( filedes[0]). D'un
point de vue interne (dans le noyau), un tube est vu comme deux fichiers
ouverts, un en lecture et l'autre en écriture.
Exemple:
Les procédures P(S) et V(S) peuvent s'écrire
facilement avec un tube
Créer et initialiser un
sémaphore Sem à N : créer un tube et
y écrire N fois un caractère quelconque (un "jeton").
Exécuter un P(Sem):
Lire un caractère dans le tube (la lecture est bloquante si le tube
est vide)
Exécuter un V(Sem):
Ecrire un caractère dans le tube.
void initsem (int Sem[2], int N)
{char c = 'a';
pipe(Sem);
for (int i=1; i<=N; i++) write(Sem[1], &c, 1);
}