SYSTEM |
Système |
---|---|
Langage C++ | cstdlib (stdlib.h) |
Syntaxe
int system(const char *command) |
Paramètres
Nom | Description |
---|---|
command | Ce paramètre permet d'indiquer la commande à faire exécuter par le système d'exploitation. |
Description
Cette fonction permet de lancer une commande dans le système d'exploitation.
Remarques
- La fonction system() transmet la chaîne de caractères pointée par command en tant que commande au processeur de commandes du système d'exploitation.
- Si la fonction system() est appelé avec un pointeur null, il retournera une valeur différent de zéro si un processeur de commandes est présent, et zéro sinon. Certains codes C++ seront exécutés dans des systèmes dédiés ne disposant pas de systèmes d'exploitation et de processeurs de commande, vous ne pourrez donc pas supposer qu'un processeur de commande est présent.
- La valeur de retour de la fonction system() est définie par la mise en oeuvre du compilateur. Cependant, il retournera généralement zéro si la commande a été exécutée avec succès et différent de zéro sinon.
- Paramètre de commande : Le paramètre command est une chaîne de caractères spécifiant la commande à exécuter. Cela peut être n'importe quelle commande valide pour l'interpréteur de commande de l'environnement d'exécution, comme des commandes Unix, des commandes Windows, ou même des scripts. Si command est une chaîne vide ou NULL, system renvoie une valeur d'erreur sans exécuter de commande.
- Retour de valeur : La fonction renvoie un entier correspondant au code de retour de la commande exécutée. En général, un retour de 0 indique que la commande s'est exécutée avec succès, tandis qu'une valeur différente de zéro indique un échec ou une erreur. Les détails sur l'échec peuvent être spécifiques à la commande exécutée et peuvent être consultés dans la documentation du système d'exploitation.
- Dépendance à l'environnement : system dépend de l'environnement d'exécution dans lequel le programme est exécuté. Par conséquent, les commandes disponibles et leur comportement peuvent varier d'un système d'exploitation à un autre. Par exemple, une commande fonctionnant sous Unix/Linux peut ne pas être disponible sous Windows, ce limitant la portabilité des programmes utilisant system.
- Sécurité et vulnérabilités : L'utilisation de system peut introduire des risques de sécurité, surtout si la commande à exécuter est construite à partir de l'entrée de l'utilisateur. Cela peut permettre des attaques par injection de commande, où un utilisateur malveillant pourrait exécuter des commandes non prévues. Il est donc important de valider soigneusement toutes les entrées avant de les utiliser dans des appels à system.
- Impact sur les performances : Appeler system peut être relativement coûteux en termes de performances, car cela implique le lancement d'un nouveau processus et l'exécution d'un shell, ce qui peut ralentir le programme, surtout s'il est appelé fréquemment. Pour des opérations simples qui n'exigent pas d'interaction avec le système, il peut être préférable d'utiliser des appels de fonctions C++ standard ou des bibliothèques dédiées.
- Exécution synchrone : La fonction system exécute la commande de manière synchrone, ce qui signifie que le programme appelant est bloqué jusqu'à ce que la commande ait terminé son exécution. Cela peut être problématique dans les programmes où la réactivité est essentielle, comme les interfaces utilisateur. Dans de tels cas, il peut être plus approprié d'utiliser des méthodes asynchrones pour lancer des processus, comme les processus légers ou les bibliothèques spécialisées.
- Alternatives et meilleures pratiques : Pour des fonctionnalités plus avancées et un meilleur contrôle des processus, il est recommandé d'utiliser des API spécifiques aux systèmes d'exploitation, comme fork et exec sous Unix/Linux ou CreateProcess sous Windows.
- De plus, dans des applications modernes en C++, il est souvent plus judicieux d'utiliser des bibliothèques comme Boost.Process offrant des interfaces plus sûres et plus flexibles pour la gestion des processus.
Exemple
Voici un exemple permettant d'afficher le contenu répertoire courant à l'aide de la commande «DIR» du système d'exploitation :

on obtiendra le résultat suivant :
Affiche le contenu du répertoire courant : Le volume dans le lecteur C n'a pas de nom Le numéro de série du volume est 18FA-6580 Répertoire de C:\SOURCE\SAMPLES\CPP . <DIR> 11-11-06 20:30 .. <DIR> 11-11-06 20:30 ABORT CPP 221 12-03-11 14:17 ABORT EXE 9360 12-03-11 12:38 ABORT OBJ 359 12-03-11 12:38 ABS1 CPP 128 12-03-11 14:15 ABS2 CPP 230 12-03-11 14:11 ABS3 CPP 663 12-03-11 14:33 ABS4 CPP 252 12-03-11 14:42 ABS5 CPP 326 12-03-11 14:47 ABS6 CPP 478 12-03-11 14:53 ABSREAD CPP 275 12-03-11 14:58 ACCESS CPP 258 12-03-11 15:34 ACOS CPP 147 12-03-11 15:46 ALLOCA CPP 334 12-03-11 15:55 ALLOCMEM CPP 408 12-03-11 16:12 ASCTIME CPP 407 12-03-11 16:19 ASIN CPP 149 12-03-11 16:26 ASSERT CPP 201 12-03-11 19:19 ATAN CPP 202 12-03-11 19:29 ATAN2 CPP 294 12-03-11 19:37 ATEXIT CPP 456 12-03-11 19:47 ATOF CPP 279 12-03-11 19:56 ATOI CPP 170 12-03-11 20:04 ATOL CPP 170 12-03-11 20:22 BDOS CPP 168 12-03-11 20:29 BSEARCH CPP 493 12-03-11 20:40 CALLOC CPP 348 12-03-12 19:33 CEIL CPP 416 12-03-12 19:47 CLEARERR CPP 256 12-03-12 20:03 CLOCK CPP 162 12-03-12 20:11 COORDELT CPP 2788 12-03-18 20:04 COS CPP 197 12-03-12 20:26 COSH CPP 203 12-03-12 20:34 CTIME CPP 190 12-03-12 20:42 DIFFTIME CPP 278 12-03-12 20:51 DIV CPP 389 12-03-12 21:03 EXIT CPP 233 12-03-12 21:42 EXP CPP 193 12-03-12 21:53 FABS CPP 271 12-03-13 20:38 FCLOSE CPP 181 12-03-13 21:12 FCLOSEAL CPP 335 12-03-14 18:56 FEOF CPP 317 12-03-14 19:28 FERROR CPP 334 12-03-14 19:51 FFLUSH CPP 253 12-03-14 20:01 FGETS CPP 312 12-03-14 20:20 FLOOR CPP 433 12-03-14 20:34 FMOD CPP 417 12-03-14 20:43 FOPEN CPP 212 12-03-14 21:00 FPRINTF CPP 507 12-03-15 19:43 FPUTC CPP 380 12-03-15 20:23 FPUTS CPP 217 12-03-16 20:13 FREE CPP 367 12-03-16 20:49 GETCHAR CPP 149 12-03-16 20:56 GETENV CPP 130 12-03-16 21:05 ISALNUM CPP 211 12-03-24 12:06 ISALNUM EXE 8460 12-03-24 12:07 ISALPHA CPP 798 12-03-24 11:22 ISCNTRL CPP 335 12-03-24 11:45 ISCNTRL EXE 6054 12-03-24 11:48 ISDIGIT CPP 559 12-03-16 21:14 ISGRAPH CPP 211 12-03-24 11:56 ISGRAPH EXE 8460 12-03-24 11:59 ISLOWER CPP 592 12-03-24 11:39 ISLOWER EXE 8704 12-03-24 11:39 ISPUNCT CPP 211 12-03-16 21:20 ISSPACE CPP 325 12-03-24 11:29 ISSPACE EXE 6050 12-03-24 11:30 ISUPPER CPP 522 12-03-24 11:11 ISUPPER EXE 8636 12-03-24 11:12 ISXDIGIT CPP 212 12-03-24 12:02 ISXDIGIT EXE 8460 12-03-24 12:03 LABS CPP 347 12-03-16 21:36 LDEXP CPP 297 12-03-24 12:16 LDIV CPP 510 12-03-16 21:43 LOCALTIM CPP 343 12-03-16 22:05 LOG CPP 198 12-03-16 22:18 LOG10 CPP 201 12-03-16 22:26 LONGJMP CPP 315 12-03-24 19:25 LONGJMP EXE 8580 12-03-24 19:26 MALLOC CPP 350 12-03-16 22:36 MEMCPY CPP 275 12-03-16 22:42 MEMMOVE CPP 276 12-03-24 9:53 MEMSET1 CPP 409 12-03-16 22:50 MEMSET2 CPP 254 12-03-16 22:55 MODF CPP 1280 12-03-17 9:29 POW CPP 407 12-03-17 19:21 PRINTF CPP 349 12-03-17 19:29 PUTC CPP 381 12-03-17 19:43 PUTCHAR CPP 258 12-03-17 19:48 PUTS CPP 114 12-03-17 20:00 RAND CPP 193 12-03-17 20:00 READTEXT TXT 103 12-03-14 19:25 REMOVE CPP 309 12-03-17 20:09 REWIND CPP 270 12-03-17 20:17 SCANF CPP 190 12-03-17 20:29 SETJMP CPP 315 12-03-24 19:34 SET_SYM BAT 295 11-11-19 23:09 SIN CPP 197 12-03-17 20:44 SINH CPP 201 12-03-17 20:52 SPRINTF CPP 563 12-03-17 21:01 SQRT CPP 202 12-03-17 21:12 SSCANF CPP 242 12-03-17 21:21 STRCAT CPP 215 12-03-18 12:13 STRCMP CPP 354 12-03-18 15:55 STRCPY CPP 259 12-03-18 12:26 STRLEN CPP 327 12-03-18 12:39 STRTOD CPP 539 12-03-24 10:35 STRTOD EXE 18044 12-03-24 10:40 STRTOK CPP 290 12-03-24 10:50 STRTOK EXE 8920 12-03-24 10:50 STRTOL CPP 386 12-03-24 10:10 STRTOL EXE 9324 12-03-24 10:18 STRTOUL CPP 391 12-03-24 10:20 STRTOUL EXE 8828 12-03-24 10:20 SYSTEM CPP 164 12-03-24 19:41 SYSTEM EXE 9798 12-03-24 19:41 TAN CPP 197 12-03-18 14:21 TANH CPP 201 12-03-18 14:26 TIME CPP 223 12-03-18 14:45 TOASCII CPP 205 12-03-18 14:54 TOLOWER CPP 466 12-03-18 15:24 TOUPPER CPP 466 12-03-18 15:47 123 fichier(s) 163517 octets 1023932928 octets libres |
Voir également
Langage de programmation - C - Référence procédures et fonctions - system
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 735.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 272.
Dernière mise à jour : Lundi, le 3 août 2015