Cours ‐ Synthèse sur les appels systèmes - vbridonneau/CoursSysteme GitHub Wiki
Les appels systèmes fournissent une interface entre une application et le système d'exploitation. Cette page se concentre principalement sur l'utilisation des appels systèmes en C et donne quelques exemples de tels appels.
Pour effectuer un appel système en C, il est possible d'utiliser la
surcouche syscall
que l'on obtient en incluant :
#include <unistd.h>
#include <sys/syscall.h> /* For SYS_xxx definitions */
long syscall(long number, ...);
Chaque appel système à un identifiant sous la forme SYS_xxx
.
Les points de suspensions ...
vont être remplacer par les paramètres de l'appel système que l'on souhaite effectuer.
Il existe une interface à chaque appel système pour ne pas avoir à passer par syscall, mais pour directement exécuter un appel système précis.
Les appels systèmes en C sont souvent encapsulés dans des fonctions portant leur nom et ont souvent un prototype ressemblant à :
int appel_system(... /* paramères */);
Le retour de chaque appel système est tel qu'il vaut 0 ou une valeur positive si l'appel s'est exécuté sans incident.
Autrement, le retour est négatif (égal à -1) et errno
contient le code d'erreur associé au problème rencontré.
Dans la suite, nous allons voir une liste d'appel système permettant de manipuler certaines ressources.
Lorsque l'on effectue un appel système en C, il convient de toujours vérifier la valeur de retour.
Comme évoqué précédemment cette valeur est négative égale à -1 (sauf dans certains cas particuliers).
Ainsi, lorsque l'on effectue des appels systèmes, il faut être vigilant et s'assurer que tous c'est bien passer.
Dans ce but, on pourra par exemple par exemple utiliser une fonction verification
qui servira à gérer le retour d'un appel système :
void verification(int codeErreur) {
if (codeErreur < 0) {
perror(""); /* Affiche la raison de l'erreur */
exit(EXIT_FAILURE); /* Sort du programme */
}
}
Les appels systèmes présentés ici permettent de manipuler des fichiers :
Appel système | Description |
---|---|
open |
Ouverture/création d'un fichier |
close |
Fermeture d'un fichier |
write |
Ecriture dans un fichier |
read |
Lecture dans un fichier |
fstat |
Permet d'obtenir des informations d'un fichier à partir d'un descripteur de fichier qui lui est associé |
stat |
Permet d'obtenir des informations d'un fichier à partir de son nom |
statx |
Permet d'obtenir des informations supplémentaires par rapport à stat (date de création par exemple) |
mkdir |
Permet de créer un répertoire |
Les appels systèmes relatifs à la géstion des processus peut être résumé dans le tableau suivant :
Appel système | Description |
---|---|
fork |
Création d'un processus |
vfork |
Création d'un processus pour appeler execve juste après |
clone |
Création d'un processus plus précise qu'avec fork
|
clone3 |
Plus récent que clone
|
wait |
Attente de l'un des processus |
waitpid |
Attente d'un processus en particulier |
getpid |
Récupération de l'identifiant d'un processus |
getppid |
Récupération de l'identifiant du parent d'un processus |
Ils seront abordés lorsque nous aborderons la question de la gestion des processus.