0% ont trouvé ce document utile (0 vote)
2 vues4 pages

Programmes C Processus

Ce document présente plusieurs programmes en C illustrant la création et gestion de processus, ainsi que la manipulation des variables d'environnement, chacun accompagné d'explications détaillées. Les programmes couvrent des concepts clés tels que la création de processus avec fork(), la synchronisation père/fils avec wait(), et la gestion des variables d'environnement. Il sert de guide pratique pour l'apprentissage et la révision de la programmation système en C.

Transféré par

gandawilfried404
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
2 vues4 pages

Programmes C Processus

Ce document présente plusieurs programmes en C illustrant la création et gestion de processus, ainsi que la manipulation des variables d'environnement, chacun accompagné d'explications détaillées. Les programmes couvrent des concepts clés tels que la création de processus avec fork(), la synchronisation père/fils avec wait(), et la gestion des variables d'environnement. Il sert de guide pratique pour l'apprentissage et la révision de la programmation système en C.

Transféré par

gandawilfried404
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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.

Vous aimerez peut-être aussi