.\" -*- coding: UTF-8 -*- .\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de) .\" and Copyright (c) 2014 by Michael Kerrisk .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\" Modified Sat Jul 24 17:51:15 1993 by Rik Faith (faith@cs.unc.edu) .\" Modified 11 May 1998 by Joseph S. Myers (jsm28@cam.ac.uk) .\" Modified 14 May 2001, 23 Sep 2001 by aeb .\" 2004-12-20, mtk .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH SYSTEM 3 "6 mars 2019" "" "Manuel du programmeur Linux" .SH NOM system \- Exécuter une commande d'interpréteur .SH SYNOPSIS .nf \fB#include \fP .PP \fBint system(const char *\fP\fIcommande\fP\fB);\fP .fi .SH DESCRIPTION La fonction de bibliothèque \fBsystem\fP() utilise \fBfork\fP(2) pour créer un processus enfant qui exécute la commande d’interpréteur indiquée dans \fIcommande\fP en utilisant \fBexecl\fP(3) comme ceci\ : .PP .in +4n .EX execl("/bin/sh", "sh", "\-c", commande, (char *) NULL); .EE .in .PP \fBsystem\fP() se termine après l’exécution de la commande. .PP Lors de l’exécution de la commande, \fBSIGCHLD\fP sera bloqué, et \fBSIGINT\fP et \fBSIGQUIT\fP seront ignorés dans le processus qui appelle \fBsystem\fP() (ces signaux seront traités conformément à leurs valeurs par défaut dans le processus enfant qui exécute \fIcommande\fP). .PP Si la valeur de \fIcommande\fP est NULL, \fBsystem\fP() renvoie un état indiquant si un interpréteur de commande est disponible sur le système. .SH "VALEUR RENVOYÉE" La valeur renvoyée par \fBsystem\fP() est une des suivantes\ : .IP * 3 Si \fIcommande\fP est NULL, alors une valeur différente de zéro est renvoyée si un interpréteur de commandes est accessible, et \fB0\fP sinon. .IP * Si un processus enfant n’a pas pu être créé ou si son état n’a pas pu être récupéré, la valeur renvoyée est \fB\-1\fP et \fIerrno\fP est définie pour indiquer l'erreur. .IP * Si un interpréteur n’a pas pu s’exécuter dans le processus enfant, alors la valeur renvoyée est comme si l’interpréteur enfant s’était terminé en appelant \fB_exit\fP(2) avec l’état 127. .IP * Si tous les appels système réussissent, alors la valeur renvoyée est l’état de retour de l’interpréteur enfant utilisé pour exécuter \fIcommande\fP (l’état final d’un interpréteur est l’état final de la dernière commande qu’il exécute). .PP Dans les deux derniers cas, la valeur renvoyée est un «\ état d’attente\ » qui peut être examiné en utilisant les macros décrites dans \fBwaitpid\fP(2) (c’est\-à\-dire \fBWIFEXITED\fP(), \fBWEXITSTATUS\fP(),\ etc.). .PP \fBsystem\fP() n'affecte pas l'état d'attente des autres processus enfants. .SH ERREURS \fBsystem\fP() peut échouer avec une des erreurs décrites pour \fBfork\fP(2). .SH ATTRIBUTS Pour une explication des termes utilisés dans cette section, consulter \fBattributes\fP(7). .TS allbox; lb lb lb l l l. Interface Attribut Valeur T{ \fBsystem\fP() T} Sécurité des threads MT\-Safe .TE .SH CONFORMITÉ POSIX.1\-2001, POSIX.1\-2008, C89, C99. .SH NOTES \fBsystem\fP() fournit simplicité et commodité\ : elle gère tous les détails des appels de \fBfork\fP(2), \fBexecl\fP(3) et \fBwaitpid\fP(2), ainsi que les manipulations nécessaires des signaux\ ; de plus, l’interpréteur de commande réalise les substitutions habituelles et les redirections des entrées et sorties de \fIcommande\fP. L'inconvénient principal de \fBsystem\fP() est son manque d'efficacité\ : des appels système supplémentaires sont nécessaires pour créer le processus qui exécute l’interpréteur de commande et pour exécuter l’interpréteur de commande. .PP Si la macro de test de fonctionnalité \fB_XOPEN_SOURCE\fP est définie (avant d'inclure \fItout\fP fichier d'en\(hytête), les macros décrites dans \fBwaitpid\fP(2) (\fBWEXITSTATUS\fP(), etc.) sont disponibles en incluant \fI\fP. .PP Comme mentionné plus haut, \fBsystem\fP() ignore \fBSIGINT\fP et \fBSIGQUIT\fP. Un programme qui l'appelle depuis une boucle risque de ne pas pouvoir être interrompu, à moins qu'il ne vérifie le code de retour de l'enfant. Par exemple\ : .PP .in +4n .EX while (quelque_chose) { int ret = system("toto"); if (WIFSIGNALED(ret) && (WTERMSIG(ret) == SIGINT || WTERMSIG(ret) == SIGQUIT)) break; } .EE .in .PP Selon POSIX.1, il n'est pas précisé si les gestionnaires enregistrés à l'aide de \fBpthread_atfork\fP(3) sont appelés au cours de l'exécution de \fBsystem\fP(). Dans l'implémentation de la glibc, de tels gestionnaires ne sont pas appelés. .PP Avec les versions de la glibc antérieures à 2.1.3, la vérification de la disponibilité de \fI/bin/sh\fP n'était pas faite lorsque \fIcommande\fP était NULL. Il était supposé être toujours disponible, et \fBsystem\fP() renvoyait toujours \fB1\fP dans ce cas. Depuis la glibc\ 2.1.3, cette vérification est effectuée, car, même si POSIX.1\-2001 impose une implémentation conforme pour fournir un interpréteur, cet interpréteur peut ne pas être disponible ou exécutable si le programme appelant a auparavant appelé \fBchroot\fP(2) (ce qui n'est pas spécifié dans POSIX.1\-2001). .PP .\" La commande d’interpréteur peut se terminer avec un état de 127, ce qui provoque une valeur renvoyée de \fBsystem\fP() non distinguable du cas où un interpréteur n’a pas pu être exécuté dans le processus enfant. .SS "Mises en garde" N'utilisez pas \fBsystem\fP() à partir d'un programme avec privilèges (un programme set\-user\-ID, set\-group\-ID ou possédant des capacités), car des valeurs particulières de certaines variables d'environnement pourraient être utilisées pour corrompre l'intégrité du système. Par exemple, \fBPATH\fP pourrait être redéfinie de façon à exécuter un programme arbitraire avec privilèges. Utilisez plutôt la famille de fonctions \fBexec\fP(3), mais pas \fBexeclp\fP(3) ou \fBexecvp\fP(3) (qui utilisent aussi la variable d'environnement \fBPATH\fP pour rechercher un exécutable). .PP En fait, \fBsystem\fP() ne fonctionnera pas correctement à partir de programmes ayant des privilèges set\-user\-ID ou set\-group\-ID sur les systèmes où \fI/bin/sh\fP redirige vers bash version\ 2, car ce dernier annule les privilèges au démarrage par mesure de sécurité (Debian utilise un interpréteur de commande différent, \fBdash\fP(1), qui n'effectue pas cette annulation de privilèges si on l'invoque à l'aide du lien symbolique \fBsh\fP). .PP Toute entrée utilisateur qui constitue une partie de \fIcommande\fP doit être nettoyée \fIavec soin\fP afin de s'assurer que des commandes de l'interpréteur ou des options de commandes inattendues ne seront pas exécutées. Les risques de ce type sont particulièrement graves lorsqu'on utilise \fBsystem\fP() à partir d'un programme avec privilèges. .SH "VOIR AUSSI" \fBsh\fP(1), \fBexecve\fP(2), \fBfork\fP(2), \fBsigaction\fP(2), \fBsigprocmask\fP(2), \fBwait\fP(2), \fBexec\fP(3), \fBsignal\fP(7) .SH COLOPHON Cette page fait partie de la publication\ 5.10 du projet \fIman\-pages\fP Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à l'adresse \%https://www.kernel.org/doc/man\-pages/. .PP .SH TRADUCTION La traduction française de cette page de manuel a été créée par Christophe Blaess , Stéphan Rafin , Thierry Vignaud , François Micaux, Alain Portal , Jean-Philippe Guérard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas François , Florentin Duneau , Simon Paillard , Denis Barbier , David Prévot et Lucien Gentis . .PP Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. .PP Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à .MT debian-l10n-french@lists.debian.org .ME .