Les tubes anonymes
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);
}

void P(int Sem[2])
{char c;
read(Sem[0], &c, 1);
}

void V(int Sem[2])
{char c = 'a';
write(Sem[1], &c, 1);
}

suivant      plan