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

Programmation Systeme Unix

Ce document traite de la programmation système en C, en se concentrant sur la création et la gestion des processus via fork(), ainsi que sur la manipulation des variables d'environnement. Il explique les identifiants de processus, la gestion des erreurs, la terminaison des processus et les bonnes pratiques à suivre. Les concepts avancés incluent la communication entre processus et l'utilisation de signaux.

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

Programmation Systeme Unix

Ce document traite de la programmation système en C, en se concentrant sur la création et la gestion des processus via fork(), ainsi que sur la manipulation des variables d'environnement. Il explique les identifiants de processus, la gestion des erreurs, la terminaison des processus et les bonnes pratiques à suivre. Les concepts avancés incluent la communication entre processus et l'utilisation de signaux.

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 détaillé sur la programmation système en C avec fork et variables d'environnement :

Programmation Système en C : Processus, fork


et Variables d’Environnement
1. Les Processus et leur Identité
Un processus est un programme en cours d'exécution. Chaque processus a un identifiant unique,
appelé PID (Process ID). - Le processus père crée un ou plusieurs processus fils. - Chaque fils peut
connaître le PID de son père avec getppid() . - Chaque processus connaît son propre PID avec
getpid() .

Exemple :

• Père PID = 1000


• Fils PID = 1001
• PPID du fils = 1000

2. Création de Processus avec fork()


fork() duplique le processus appelant. - Après fork() , il y a deux processus identiques mais
indépendants. - La valeur de retour de fork() permet de savoir où l’on est :

Valeur Signification

-1 Erreur, aucun processus fils créé

0 Fils, code exécuté dans le processus fils

>0 Père, valeur = PID du fils

Exemple :

pid_t pid = fork();


if (pid == 0) {
printf("Je suis le fils, PID=%d\n", getpid());
} else if (pid > 0) {
printf("Je suis le père, PID=%d, mon fils=%d\n", getpid(), pid);
} else {
perror("fork");
}

1
3. Gestion des erreurs de fork()
fork() peut échouer temporairement ( EAGAIN ) ou définitivement ( ENOMEM ). - Pour gérer les
erreurs temporaires, on peut réessayer avec une boucle :

do {
pid = fork();
} while ((pid == -1) && (errno == EAGAIN));

- Si une erreur définitive survient, le programme retourne -1 et s'arrête.

4. Terminaison des Processus


• Le fils se termine avec exit(code) :
• EXIT_SUCCESS = 0
• EXIT_FAILURE = 1
• Le père peut récupérer le code du fils avec wait(&status) et analyser :

if (WIFEXITED(status)) {
printf("Code de retour : %d\n", WEXITSTATUS(status));
}
if (WIFSIGNALED(status)) {
printf("Tué par le signal : %d\n", WTERMSIG(status));
}

5. Affichage et informations système


• printf() pour l’affichage standard
• perror() pour afficher une erreur liée à errno
• getpid() et getppid() pour récupérer les PIDs

Exemple de sortie :

Nous sommes dans le fils !


Le PID du fils est 1201.
Le PPID du fils est 1200.

Nous sommes dans le père !


Le PID du fils est 1201.
Le PID du père est 1200.

Terminaison normale du processus fils.


Code de retour : 1.

2
6. Variables d’environnement
• Ce sont des variables système ou utilisateur qui influencent les programmes.
• Exemples : PATH , HOME , USER

Fonctions principales :

Fonction Rôle

getenv("NOM") Lire une variable

setenv("NOM","valeur",1) Créer/modifier

unsetenv("NOM") Supprimer

putenv("NOM=valeur") Ajouter une variable

Exemple :

#include <stdio.h>
#include <stdlib.h>
int main() {
char *val = getenv("PATH");
if (val != NULL) printf("PATH=%s\n", val);
return 0;
}

7. Concepts Avancés
• Communication entre processus : pipes, sockets, mémoire partagée
• Signaux pour contrôler les processus : kill() , SIGKILL , SIGTERM
• Boucles de retry pour erreurs temporaires ( EAGAIN )
• Types système pour portabilité : pid_t , uid_t , gid_t

8. Bonnes pratiques
1. Toujours utiliser pid_t pour les PID
2. Vérifier les erreurs de fork() et wait()
3. Le fils et le père exécutent du code différent après fork
4. Utiliser wait() pour récupérer le code de retour du fils
5. Lire les variables d’environnement avec getenv()

3
9. Résumé
Ce document couvre : - La création et gestion de processus avec fork() - La récupération des codes
de retour du fils avec wait() - L’affichage des informations systèmes - La lecture et manipulation des
variables d’environnement

Ces concepts permettent de comprendre et maîtriser la programmation système sous Unix/Linux en


C.

Vous aimerez peut-être aussi