abort()execl()
execle()
execlp()
execv()
execvp()sigaddset()
sigdelset()
sigemptyset()
sigfillset()
sigismember()
signal()
abort - Termine anormalement le programme.Syntaxe
#include <stdlib.h> // contient le prototype de abort()
void abort (void); |
Description
La fonction abort() envoie au processus qui l'appelle le signal SIGABRT dont le traitement par défaut est de terminer le processus de façon anormale : ni la fermeture des fichiers ouverts, ni la sauvegarde des buffers de sortie, ni la suppressions des fichiers temporaires ne sont garantis : ils dépendent de l'implémentation. Sous Linux, ces opérations semblent être effectuées.
Si, dans le programme, le signal SIGABRT est dérouté vers un traitant, et si ce traitant se termine "normalement" [1], la fonction abort() reprend le contrôle du processus après la fin du traitant et se termine par l'instruction :
exit (EXIT_FAILURE); |
Même si le signal SIGABRT est ignoré ou bloqué, la fonction abort() passe outre.
Valeur retournée
La fonction abort() ne revient jamais.
Diagnostic d'erreur
Aucun
execl - exécute un programme (voir Comparaison des fonctions de la famille exec..()).Syntaxe
#include <unistd.h> // permet d'atteindre le prototype de execl()
int execl (const char * path, const char * arg, ...); |
Description
Le symbole ... (appelé ellipse) signifie que la fonction execl() peut admettre un nombre de paramètres variable (>= 2). La sémantique de la fonction execl() exige que les paramètres supplémentaires soient tous de type const char *, le dernier devant être un pointeur nul (NULL par exemple).
La fonction C execl() appelle la fonction système execve() en lui passant les paramètres suivants :
Valeur retournée
En cas d'appel réussi, la fonction execl() ne peut renvoyer de valeur au programme en cours puisque son code n'existe plus et a été remplacé par le nouveau code.
Diagnostic d'erreur
En cas d'erreur, la fonction execl() renvoie la valeur -1 et la variable globale errno est positionnée.
execle - exécute un programme (voir Comparaison des fonctions de la famille exec..()).Syntaxe
#include <unistd.h> // permet d'atteindre le prototype de execle()
int execle (const char * path, const char * arg , ..., char * const envp[]); |
Description
Le symbole ... signifie ici que la fonction execle() peut admettre plusieurs paramètres de type const char * : arg0, arg1, ..., argn, suivis du paramètre envp. Cette écriture est une simple indication car elle syntaxiquement incorrecte en C/C++, le symbole ellipse ... devant apparaître à la place du dernier paramêtre.
La déclaration réelle dans le fichier <unistd.h> est d'ailleurs à peu près :
extern int execle (const char * path, const char * arg, ...); |
La sémantique de la fonction execle(), comme celle de execl() exige que les paramètres argi soient tous de type const char *, le dernier, argn devant être un pointeur nul (NULL par exemple).
Le paramètre envp est un tableau de pointeurs vers des chaînes de caractères C (NTCTS) constantes, terminé par un pointeur nul, représentant la liste des variables d'environnement du programme à exécuter.
La fonction C execle() appelle la fonction système execve() en lui passant les paramètres suivants :
Valeur retournée
En cas d'appel réussi, la fonction execle() ne peut renvoyer de valeur au programme en cours puisque son code n'existe plus et a été remplacé par le nouveau code.
Diagnostic d'erreur
En cas d'erreur, la fonction execle() renvoie la valeur -1 et la variable globale errno est positionnée.
execlp - exécute un programme (voir Comparaison des fonctions de la famille exec..()).Syntaxe
#include <unistd.h> // permet d'atteindre le prototype de execlp()
int execlp (const char * file, const char * arg, ...); |
Description
La fonction execlp() est semblable à la fonction execl(). La seule différence réside dans le fait que, si la chaîne de caractêres pointée par file ne contient pas le caractère /, le fichier est cherché dans tous les répertoires indiqués dans la variable d'environnement PATH. C'est le chemin complet qui est passé en paramètre à la fonction système execve().
Valeur retournée
En cas d'appel réussi, la fonction execlp() ne peut renvoyer de valeur au programme en cours puisque son code n'existe plus et a été remplacé par le nouveau code.
Diagnostic d'erreur
En cas d'erreur, la fonction execlp() renvoie la valeur -1 et la variable globale errno est positionnée.
execv - exécute un programme (voir Comparaison des fonctions de la famille exec..()).Syntaxe
#include <unistd.h> // permet d'atteindre le prototype de execv()
int execv (const char * path, char * const argv[]); |
Description
La fonction execv() est semblable à la fonction execl(). La seule différence est que les arguments qui suivent le premier sont rangés dans un vecteur de pointeurs de chaînes de caractères dont le dernier doit être un pointeur NULL.
Valeur retournée
En cas d'appel réussi, la fonction execv() ne peut renvoyer de valeur au programme en cours puisque son code n'existe plus et a été remplacé par le nouveau code.
Diagnostic d'erreur
En cas d'erreur, la fonction execv() renvoie la valeur -1 et la variable globale errno est positionnée.
execvp - exécute un programme (voir Comparaison des fonctions de la famille exec..()).Syntaxe
#include <unistd.h> // permet d'atteindre le prototype de execvp()
int execvp (const char * file, char * const argv[]); |
Description
La fonction execvp() est semblable à la fonction execv(). La seule différence réside dans le fait que, si la chaîne de caractêres pointée par file ne contient pas le caractère /, le fichier est cherché dans tous les répertoires indiqués dans la variable d'environnement PATH. C'est le chemin complet qui est passé en paramètre à la fonction système execve().
Valeur retournée
En cas d'appel réussi, la fonction execvp() ne peut renvoyer de valeur au programme en cours puisque son code n'existe plus et a été remplacé par le nouveau code.
Diagnostic d'erreur
En cas d'erreur, la fonction execvp() renvoie la valeur -1 et la variable globale errno est positionnée.
mkfifo - Crée un pipe nommé (FIFO)Syntaxe
#include <sys/types.h> // contient la déclaration de mode_t
#include <sys/stat.h> // contient le prototype de mkfifo() int mkfifo (const char * pathname, mode_t mode); |
Description
La fonction mkfifo() crée un pipe nommé, de nom et chemin d'accès indiqués par le paramètre pathname. Les droits sont calculés à partir du paramètre mode et de la valeur courante de umask.
L'appel à la fonction C mkfifo() est équivalent à l'appel de la fonction système
mknod()
suivant :
dev_t dev; // pour les FIFOs, le paramètre dev
mknod (pathname, mode | S_IFIFO, dev); // est ignoré mais doit être présent |
Valeur retournée
La fonction mkfifo() retourne 0 en cas de succès.
Diagnostic d'erreur
La fonction mkfifo() renvoie -1 en cas d'erreur et positionne la variable globale errno.
Ces fonctions ou macros sont disponibles dans les différents systèmes, qui permettent les manipulations des masques de signaux.
signal - modifie le traitant d'un signalSyntaxe
#include <signal.h> // contient le profil de signal()
void (* signal (int signum, void (* handler) (int))) (int); |
Description
La fonction signal() remplace le traitant du signal signum par le nouveau traitant handler, qui est un pointeur vers une fonction ayant un paramètre de type int et ne renvoyant rien : void. Son type est donc void (*) (int).
Le paramètre handler peut prendre deux valeurs particulières correspondant aux macros définies dans le fichier <signal.h> :
Valeur retournée
La fonction signal() renvoie un pointeur vers l'ancien traitant du signal signum.
Diagnostic d'erreur
La fonction signal() renvoie -1 (de type void (*) (int)) en cas d'erreur et positionne la variable globale errno.
sleep - suspend le processus pendant un délai en secondesSyntaxe
#include <unistd.h>
unsigned int sleep (unsigned int nb_sec); |
Description
La fonction sleep() suspend le processus pendant le nombre de secondes qui lui est passé en paramètre. Cependant, elle est interruptible par n'importe quel signal non ignoré.
Valeur retournée
La fonction sleep() renvoie :
Attention : le nombre de secondes est entier, donc arrondi.
Diagnostic d'erreur
La fonction sleep() ne peut pas échouer.
system - exécute une commande.Syntaxe
#include <stdlib.h>
int system (const char * command); |
Description
La fonction system() exécute la commande représentée par la chaîne de caractères command. Plus précisément, elle crée un fils (appel de la fonction système fork()) qui lance l'exécution (appel de la fonction système execve()) d'un shell (commande /bin/sh) auquel il passe la commande à exécuter. Elle attend la fin du fils (fonction système waitpid()) en renvoyant le compte rendu de l'opération. Pendant toute l'exécution, les signaux SIGINT et SIGQUIT sont ignorés, SIGCHLD est bloqué (fonction système sigaction()).
Valeur retournée
La fonction system() renvoie :
Diagnostic d'erreur
Voir la valeur retournée.
tmpnam - génère le nom d'un fichier temporaireSyntaxe
#include <stdio.h> // contient le profil de tmpnam()
char * tmpnam (char * name); |
Description
La fonction tmpnam() fournit à l'utilisateur un nom de fichier unique, appelé fichier temporaire. Si le paramètre name est nul, la fonction stocke le nom dans un espace mémoire statique (voir Déclaration locale, lien interne) dont elle renvoie l'adresse. Il est fortement déconseillé d'essayer de modifier directement ce nom. Chaque nouvel appel à la fonction détruit le nom du fichier temporaire précédemment généré. En conséquence, il est nécessaire de le récupérer dans une variable du programme (soit en passant l'adresse de cette variable dans le paramètre name, soit en recopiant la zone statique au moyen de la fonction C standard strcpy(). La variable réceptrice doit avoir une taille minimale de L_tmpnam accessible à partir du fichier inclus C++ <climits>. En réalité, L_tmpnam est défini dans le fichier <bits/stdio_lim.h>, lui-même inclus dans <stdio.h> donc dans <cstdio>, ou dans <bits/xopen_lim.h< lui-même inclus dans <limits.h>, lui-même dans <climits> !!!
Le fichier résultant est dans le répertoire /tmp.
Valeur retournée
La fonction tmpnam() renvoie l'adresse de la zone mémoire contenant la chaîne de caractères générée (la zone statique si le pointeur name est nul en entrée, ou la valeur de name).
Diagnostic d'erreur
Si le nom du fichier n'a pas pu être généré, la fonction tmpnam() renvoie un pointeur nul et positionne la variable globale errno à EEXIST.
[1] Le traitant ne se termine pas "normalement" s'il se termine par une instruction de rupture de séquence, telle qu'un appel à longjmp() ou à exit() par exemple.