École Supérieure des Sciences et de la Technologie de Hammam Sousse
TP : Système D’exploitation 2 Durée : 1h30 / Classe : LI1
Enseignant : Ben Khlifa Hamza Année universitaire : 2025-2026
💻Correction TP5 : Communication
Inter-Processus (Pipe)
✅Anonyme (Simple) 🧪📨👶
Exercice 1 : Communication avec un Pipe
#include <stdio.h> // Pour printf, perror
#include <unistd.h> // Pour pipe(), fork(), read(), write(), close()
#include <string.h> // Pour strlen()
int main() {
int fd[2]; // fd[0] pour la lecture, fd[1] pour l'écriture
// Création du pipe anonyme
if (pipe(fd) == -1) {
perror("pipe"); // Affiche une erreur si la création échoue
return 1;
}
// Création du processus fils
if (fork() == 0) {
// Code exécuté par le processus fils
close(fd[1]); // Le fils ne doit pas écrire, on ferme donc fd[1]
char buffer[100]; // Buffer pour stocker les données lues
read(fd[0], buffer, sizeof(buffer)); // Lecture depuis le pipe
printf("Fils a lu : %s\n", buffer); // Affichage du message
close(fd[0]); // Fermeture de l'extrémité de lecture
} else {
// Code exécuté par le processus parent
close(fd[0]); // Le parent n'a pas besoin de lire, on ferme fd[0]
char* msg = "Bonjour du parent";
write(fd[1], msg, strlen(msg) + 1); // Écriture du message dans le pipe
close(fd[1]); // Fermeture de l'extrémité d'écriture
}
return 0; // Fin du programme
}
1/4
TP : Système D’exploitation 2 Durée : 1h30 / Classe : LI1
Enseignant : Ben Khlifa Hamza Année universitaire : 2025-2026
💻Correction TP5 : Communication
Inter-Processus (Pipe)
✅Anonyme (Simple) 🧪📨👶
Exercice 1 : Communication avec un Pipe
#include <stdio.h> // Pour printf, perror
#include <unistd.h> // Pour pipe(), fork(), read(), write(), close()
#include <string.h> // Pour strlen()
int main() {
int fd[2]; // fd[0] pour la lecture, fd[1] pour l'écriture
// Création du pipe anonyme
if (pipe(fd) == -1) {
perror("pipe"); // Affiche une erreur si la création échoue
return 1;
}
// Création du processus fils
if (fork() == 0) {
// Code exécuté par le processus fils
close(fd[1]); // Le fils ne doit pas écrire, on ferme donc fd[1]
char buffer[100]; // Buffer pour stocker les données lues
read(fd[0], buffer, sizeof(buffer)); // Lecture depuis le pipe
printf("Fils a lu : %s\n", buffer); // Affichage du message
close(fd[0]); // Fermeture de l'extrémité de lecture
} else {
// Code exécuté par le processus parent
close(fd[0]); // Le parent n'a pas besoin de lire, on ferme fd[0]
char* msg = "Bonjour du parent";
write(fd[1], msg, strlen(msg) + 1); // Écriture du message dans le pipe
close(fd[1]); // Fermeture de l'extrémité d'écriture
}
return 0; // Fin du programme
}
1/4