int main() {
int fd[2]; // Descripteurs de fichiers pour le tube
pid_tpid;
si (tuyau(fd) ==-1) {
perror("échec du tuyau");
sortie(1);
}
pid =fourchette();
si (pid <0) {
perror("échec de la fourchette");
sortie(1);
} else if (pid ==0) { // Processus enfant
fermer(fd[1]); // Ferme la fin d'écriture
tampon de caractères [100] ;
read(fd[0], tampon, sizeof(tampon));
printf("Enfant reçu :%s\n", buffer);
fermer(fd[0]);
} else { // Processus parent
fermer(fd[0]); // Ferme la fin de lecture
const char* message ="Bonjour du parent !";
écrire(fd[1], message, strlen(message) + 1); // +1 pour le terminateur nul
fermer(fd[1]);
attendre(NULL); // Attend que l'enfant ait fini
}
renvoie 0 ;
}
```
Canaux nommés (FIFO) :
* Création : Créé à l'aide de l'appel système `mkfifo()`. Cela crée un fichier dans le système de fichiers qui représente le canal. Le nom du fichier fait office d'identifiant du canal.
* Accès : Plusieurs processus peuvent accéder à un canal nommé. Tout processus connaissant le chemin du canal peut l'ouvrir en lecture ou en écriture (bien qu'un seul processus puisse écrire à la fois, à moins d'utiliser des configurations spéciales). Ils survivent au-delà de la durée de vie des processus qui les utilisent.
* Durée de vie : Le tube persiste dans le système de fichiers jusqu'à ce qu'il soit explicitement supprimé à l'aide de `unlink()`.
* Exemple (en utilisant deux programmes distincts communiquant via un canal nommé) :
Vous auriez besoin de deux programmes :un pour écrire dans le FIFO et un autre pour y lire. `mkfifo()` est appelé une fois (peut-être dans un script de configuration) pour créer le FIFO, puis les programmes `open()` le FIFO pour la lecture/écriture. Les processus doivent gérer les erreurs, y compris la possibilité que le FIFO n'existe pas et les erreurs sur `open()`.
Résumé des principales différences :
| Fonctionnalité | Tuyau sans nom | Canal nommé (FIFO) |
|-----------------|----------------------------|-----------------------------|
| Création | `tuyau()` | `mkfifo()` |
| Accès | Uniquement le processus de création | Processus multiples |
| Persistance | Existe uniquement pendant la durée de vie du processus | Persiste dans le système de fichiers |
| Inter-processus | Processus généralement parent-enfant ou explicitement connectés | Peut connecter des processus non liés |
| Entrée du système de fichiers | Non | Oui |
Les canaux nommés sont plus flexibles pour la communication entre des processus non liés, tandis que les canaux sans nom sont plus simples et plus efficaces pour la communication entre des processus étroitement liés comme un parent et son enfant. Le choix dépend des besoins de communication spécifiques de votre application.