SYSTEM |
Système |
---|---|
Langage C | stdlib.h |
Syntaxe
int system(const char *commande); |
Paramètres
Nom | Description |
---|---|
commande | Ce paramètre permet d'indiquer la commande à faire exécuter par le système d'exploitation. |
Retour
Valeur | Description |
---|---|
valeur entière | Ces valeurs varient en fonction du paramètre d'appel. Si le paramètre est un pointeur NULL, la fonction système renvoi une valeur différente de zéro si un interpréteur de commandes est disponible. Si le paramètre n'est pas un pointeur NULL et que la fonction système retourne, il renvoie une valeur définie dans les spécifications de l'interpréteur de commande. |
Description
Cette fonction permet de lancer une commande dans le système d'exploitation.
Algorithme
MODULE SYSTEM(commande) SI commande est NULL ALORS RETOURNE une erreur (code d'échec) FIN SI Ouvrir un processus pour exécuter la commande spécifiée SI le processus échoue à s'ouvrir ALORS RETOURNE une erreur (code d'échec) FIN SI Attendre que le processus se termine Récupérer le code de retour du processus RETOURNE le code de retour du processus |
Remarques
- Si le paramètre est NULL, la fonction système déterminera si l'environnement hôte possède un interpréteur de commande et lancera s'il existe. Si le paramètre n'est pas un pointeur NULL, la fonction système transmet la chaîne de caractères spécifié à l'interpréteur de commandes et l'exécute; par ricochet, les actions dans l'interpréteur de commande pourrait alors amener le système d'appel du programme à se comporter d'une manière non conforme ou à se terminer.
- Valeur de retour : La fonction system retourne 0 si la commande spécifiée a réussi, et une valeur non nulle si elle a échoué. En général, la valeur retournée est le code de sortie du processus exécuté, bien que cela puisse varier en fonction du système d'exploitation. Cela permet au programme de vérifier si la commande a été exécutée correctement ou non, et de réagir en conséquence.
- Exécution de commandes externes : La fonction system permet d'exécuter toute commande que l'interpréteur de commande ou l'interpréteur de commande du système d'exploitation peut interpréter. Cela inclut des commandes de gestion de fichiers, des commandes d'administration du système, ou des scripts d'interpréteur de commande. Par exemple, une commande comme "ls -l" sous Unix ou "dir" sous Windows peut être exécutée pour lister les fichiers dans un répertoire.
- Sécurité et risques : L'utilisation de system peut être risquée, surtout si la commande à exécuter est construite à partir d'entrées non sécurisées (par exemple, l'entrée de l'utilisateur). Cela expose à des attaques par injection de commandes, où un attaquant pourrait injecter des commandes malveillantes dans la chaîne de caractères passée à system. Il est donc essentiel de valider soigneusement les commandes et de ne pas inclure de données non sûres dans les paramètres passés à system.
- Plateforme et compatibilité : Le comportement de system peut varier légèrement entre les systèmes d'exploitation. Par exemple, les commandes valides sous Unix (Linux ou macOS) peuvent ne pas être valides sous Windows, et vice versa. Il est donc important de s'assurer que les commandes passées à system sont compatibles avec la plateforme sur laquelle le programme C est exécuté. Dans certains cas, il peut être nécessaire d'adapter la commande en fonction du système d'exploitation.
- Utilisation de l'interpréteur de commandes ou interpréteurs : Sur la plupart des systèmes Unix, system lance un nouveau processus exécutant la commande à travers l'interpréteur de commande (comme sh ou bash). Sous Windows, la fonction passe généralement par cmd.exe ou un autre interpréteur de commandes. Cette dépendance à un interpréteur peut introduire des comportements inattendus si des caractères spéciaux ne sont pas correctement échappés ou si l'interpréteur de commande du système n'est pas disponible ou mal configuré.
- Bloquant et synchronisée : La fonction system est bloquante et synchronisée, ce qui signifie que l'exécution du programme C s'arrête jusqu'à ce que la commande système soit terminée. Cela peut être un inconvénient si vous devez exécuter plusieurs commandes simultanément ou si vous avez besoin que votre programme continue d'exécuter d'autres tâches pendant l'exécution de la commande. Dans ce cas, des solutions comme les processus enfants ou les processus légers peuvent être plus appropriées.
- Alternative à system : Bien que system soit une méthode simple pour exécuter des commandes système, il existe des alternatives plus robustes et plus sûres pour des cas plus complexes. Par exemple, les fonctions fork et exec (sur les systèmes Unix) ou l'utilisation des API spécifiques à chaque plateforme permettent de contrôler plus finement l'exécution des processus enfants. Ces alternatives offrent également un meilleur contrôle des erreurs et de la gestion des ressources système.
Exemple
Voici un exemple permettant d'afficher le contenu répertoire courant à l'aide de la commande «DIR» du système d'exploitation :
Essayer maintenant !
on obtiendra le résultat semblable 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\P . <DIR> 11-11-06 20:30 .. <DIR> 11-11-06 20:30 ABORT C 221 12-03-11 14:17 ABORT EXE 9360 12-03-11 12:38 ABORT OBJ 359 12-03-11 12:38 ABS1 C 128 12-03-11 14:15 ABS2 C 230 12-03-11 14:11 ABS3 C 663 12-03-11 14:33 ABS4 C 252 12-03-11 14:42 ABS5 C 326 12-03-11 14:47 ABS6 C 478 12-03-11 14:53 ABSREAD C 275 12-03-11 14:58 ACCESS C 258 12-03-11 15:34 ACOS C 147 12-03-11 15:46 ALLOCA C 334 12-03-11 15:55 ALLOCMEM C 408 12-03-11 16:12 ASCTIME C 407 12-03-11 16:19 ASIN C 149 12-03-11 16:26 ASSERT C 201 12-03-11 19:19 ATAN C 202 12-03-11 19:29 ATAN2 C 294 12-03-11 19:37 ATEXIT C 456 12-03-11 19:47 ATOF C 279 12-03-11 19:56 ATOI C 170 12-03-11 20:04 ATOL C 170 12-03-11 20:22 BDOS C 168 12-03-11 20:29 BSEARCH C 493 12-03-11 20:40 CALLOC C 348 12-03-12 19:33 CEIL C 416 12-03-12 19:47 CLEARERR C 256 12-03-12 20:03 CLOCK C 162 12-03-12 20:11 COORDELT C 2788 12-03-18 20:04 COS C 197 12-03-12 20:26 COSH C 203 12-03-12 20:34 CTIME C 190 12-03-12 20:42 DIFFTIME C 278 12-03-12 20:51 DIV C 389 12-03-12 21:03 EXIT C 233 12-03-12 21:42 EXP C 193 12-03-12 21:53 FABS C 271 12-03-13 20:38 FCLOSE C 181 12-03-13 21:12 FCLOSEAL C 335 12-03-14 18:56 FEOF C 317 12-03-14 19:28 FERROR C 334 12-03-14 19:51 FFLUSH C 253 12-03-14 20:01 FGETS C 312 12-03-14 20:20 FLOOR C 433 12-03-14 20:34 FMOD C 417 12-03-14 20:43 FOPEN C 212 12-03-14 21:00 FPRINTF C 507 12-03-15 19:43 FPUTC C 380 12-03-15 20:23 FPUTS C 217 12-03-16 20:13 FREE C 367 12-03-16 20:49 GETCHAR C 149 12-03-16 20:56 GETENV C 130 12-03-16 21:05 ISALNUM C 211 12-03-24 12:06 ISALNUM EXE 8460 12-03-24 12:07 ISALPHA C 798 12-03-24 11:22 ISCNTRL C 335 12-03-24 11:45 ISCNTRL EXE 6054 12-03-24 11:48 ISDIGIT C 559 12-03-16 21:14 ISGRAPH C 211 12-03-24 11:56 ISGRAPH EXE 8460 12-03-24 11:59 ISLOWER C 592 12-03-24 11:39 ISLOWER EXE 8704 12-03-24 11:39 ISPUNCT C 211 12-03-16 21:20 ISSPACE C 325 12-03-24 11:29 ISSPACE EXE 6050 12-03-24 11:30 ISUPPER C 522 12-03-24 11:11 ISUPPER EXE 8636 12-03-24 11:12 ISXDIGIT C 212 12-03-24 12:02 ISXDIGIT EXE 8460 12-03-24 12:03 LABS C 347 12-03-16 21:36 LDEXP C 297 12-03-24 12:16 LDIV C 510 12-03-16 21:43 LOCALTIM C 343 12-03-16 22:05 LOG C 198 12-03-16 22:18 LOG10 C 201 12-03-16 22:26 LONGJMP C 315 12-03-24 19:25 LONGJMP EXE 8580 12-03-24 19:26 MALLOC C 350 12-03-16 22:36 MEMCPY C 275 12-03-16 22:42 MEMMOVE C 276 12-03-24 9:53 MEMSET1 C 409 12-03-16 22:50 MEMSET2 C 254 12-03-16 22:55 MODF C 1280 12-03-17 9:29 POW C 407 12-03-17 19:21 PRINTF C 349 12-03-17 19:29 PUTC C 381 12-03-17 19:43 PUTCHAR C 258 12-03-17 19:48 PUTS C 114 12-03-17 20:00 RAND C 193 12-03-17 20:00 READTEXT TXT 103 12-03-14 19:25 REMOVE C 309 12-03-17 20:09 REWIND C 270 12-03-17 20:17 SCANF C 190 12-03-17 20:29 SETJMP C 315 12-03-24 19:34 SET_SYM BAT 295 11-11-19 23:09 SIN C 197 12-03-17 20:44 SINH C 201 12-03-17 20:52 SPRINTF C 563 12-03-17 21:01 SQRT C 202 12-03-17 21:12 SSCANF C 242 12-03-17 21:21 STRCAT C 215 12-03-18 12:13 STRCMP C 354 12-03-18 15:55 STRCPY C 259 12-03-18 12:26 STRLEN C 327 12-03-18 12:39 STRTOD C 539 12-03-24 10:35 STRTOD EXE 18044 12-03-24 10:40 STRTOK C 290 12-03-24 10:50 STRTOK EXE 8920 12-03-24 10:50 STRTOL C 386 12-03-24 10:10 STRTOL EXE 9324 12-03-24 10:18 STRTOUL C 391 12-03-24 10:20 STRTOUL EXE 8828 12-03-24 10:20 SYSTEM C 164 12-03-24 19:41 SYSTEM EXE 9798 12-03-24 19:41 TAN C 197 12-03-18 14:21 TANH C 201 12-03-18 14:26 TIME C 223 12-03-18 14:45 TOASCII C 205 12-03-18 14:54 TOLOWER C 466 12-03-18 15:24 TOUPPER C 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 : Mardi, le 28 juillet 2015