Voici un document complet prêt à être téléchargé, regroupant plusieurs programmes en C sur les
processus, fork, wait, exit et variables d’environnement, avec explications détaillées.
Programmation Système en C : Programmes
Pratiques et Explications
Introduction
Ce document contient plusieurs programmes en C pour illustrer la création et gestion de processus, la
récupération de codes de retour et la manipulation des variables d'environnement. Chaque programme
est accompagné de son explication détaillée et de la méthodologie de conception.
Programme 1 : Création simple d’un fils
Code
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
pid_t pid = fork();
if (pid == -1) {
perror("fork");
exit(EXIT_FAILURE);
} else if (pid == 0) {
printf("Je suis le fils, PID=%d, PPID=%d\n", getpid(), getppid());
exit(EXIT_SUCCESS);
} else {
printf("Je suis le père, PID=%d, mon fils PID=%d\n", getpid(), pid);
}
return 0;
}
Explication
• fork() crée un nouveau processus fils.
• La valeur de retour de fork() permet de savoir si on est dans le père ou le fils.
• Le fils affiche son PID et celui de son père.
• Le père affiche son PID et celui de son fils.
• Concept clé : création de processus et distinction père/fils.
1
Programme 2 : Attendre la fin du fils et récupérer le code de
retour
Code
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main() {
pid_t pid = fork();
int status;
if (pid == -1) {
perror("fork");
exit(EXIT_FAILURE);
} else if (pid == 0) {
printf("Fils en cours d'exécution...\n");
exit(5); // code de retour personnalisé
} else {
wait(&status);
if (WIFEXITED(status)) {
printf("Fils terminé avec code %d\n", WEXITSTATUS(status));
}
}
return 0;
}
Explication
• wait(&status) permet au père d’attendre la fin du fils.
• WIFEXITED(status) vérifie si le fils s’est terminé normalement.
• WEXITSTATUS(status) récupère le code de retour.
• Concept clé : synchronisation père/fils et récupération de statut.
Programme 3 : Gestion d’erreurs temporaires avec EAGAIN
Code
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
2
int main() {
pid_t pid;
do {
pid = fork();
} while (pid == -1 && errno == EAGAIN);
if (pid == -1) {
perror("fork");
exit(EXIT_FAILURE);
} else if (pid == 0) {
printf("Fils créé avec succès\n");
exit(EXIT_SUCCESS);
} else {
printf("Père, PID du fils=%d\n", pid);
}
return 0;
}
Explication
• fork() peut échouer temporairement si le système est surchargé.
• La boucle do…while réessaie tant que errno == EAGAIN .
• Concept clé : gestion des erreurs temporaires dans la création de processus.
Programme 4 : Lire et afficher une variable d’environnement
Code
#include <stdio.h>
#include <stdlib.h>
int main() {
char *home = getenv("HOME");
if (home != NULL) {
printf("La variable HOME vaut : %s\n", home);
} else {
printf("La variable HOME n'existe pas.\n");
}
return 0;
}
Explication
• getenv("HOME") récupère la valeur de la variable d’environnement HOME.
• Affiche la valeur si elle existe, sinon message d’erreur.
3
• Concept clé : lecture des variables d’environnement.
Programme 5 : Créer, lire et supprimer une variable
d’environnement
Code
#include <stdio.h>
#include <stdlib.h>
int main() {
setenv("MONVAR", "12345", 1); // crée ou modifie MONVAR
char *val = getenv("MONVAR");
printf("MONVAR = %s\n", val);
unsetenv("MONVAR"); // supprime MONVAR
val = getenv("MONVAR");
if (val == NULL) {
printf("MONVAR a été supprimée\n");
}
return 0;
}
Explication
• setenv() crée ou modifie la variable.
• getenv() lit la variable.
• unsetenv() supprime la variable.
• Concept clé : gestion complète d’une variable d’environnement.
Méthodologie générale
1. Identifier le besoin : création d’un fils, récupération de code, lecture/écriture de variables.
2. Choisir la fonction appropriée : fork() , wait() , getenv() , setenv() .
3. Gérer les erreurs : vérifier le retour de fork() et utiliser perror() .
4. Différencier père et fils : utiliser la valeur de retour de fork() .
5. Tester et afficher : printf() pour vérifier le comportement.
Ce document constitue un guide pratique complet avec plusieurs programmes C et explications
détaillées, idéal pour révision, apprentissage ou cours.