FAQ CConsultez toutes les FAQ
Nombre d'auteurs : 35, nombre de questions : 194, dernière mise à jour : 18 février 2018 Ajouter une question
Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums de www.developpez.com et de l'expérience personnelle des auteurs.
Je tiens à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes ; les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez devenir rédacteur, lisez ceci .
Sur ce, je vous souhaite une bonne lecture.
Pour accéder aux paramètres de la ligne de commande, il suffit de déclarer la fonction main() de la façon suivante :
Code C : | Sélectionner tout |
1 2 3 4 | int main(int argc, char * argv[]) { return 0; } |
- argc est le nombre de paramètres constituant la ligne de commande.
- argv est un tableau de pointeurs sur des chaînes de caractères qui représentent les paramètres de la ligne de commande.
- argv[0] représente le « nom du programme » et argv[1] à argv[argc - 1] les paramètres passés au programme. argv[argc] vaut toujours NULL.
Attention, le « nom du programme » ne signifie pas le nom de l'exécutable. argv[0] peut pointer vers :
Mais il est garanti que le contenu de argv[0] ne sera jamais NULL (ce qui implique que argc vaut toujours au moins 1…). |
La fonction getenv() permet de lire la valeur d'une variable d'environnement.
Code C : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 | #include <stdio.h> #include <stdlib.h> int main() { printf("HOME : %s\n", getenv("HOME")); printf("HOMEPATH : %s\n", getenv("HOMEPATH")); return 0; } |
La fonction putenv(), introduite par POSIX, permet quant à elle de créer ou de modifier une variable d'environnement.
Ces fonctions sont toutes déclarées dans stdlib.h.
Pour avoir la liste des variables d'environnement, vous pouvez regarder l'entrée Comment récupérer la liste des variables d'environnement ?
Il existe, sur certains compilateurs, une forme de déclaration de la fonction main() qui donne accès aux variables d'environnement via un de ses paramètres.
Code C : | Sélectionner tout |
1 2 3 4 | int main(int argc, char * argv[], char * envp[]) { return 0; } |
Code c : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <stdio.h> int main(int argc, char * argv[], char * envp[]) { unsigned short i; for(i = 0; envp[i] != NULL; i++) { printf("%s\n", envp[i]); } return 0; } |
Cette fonction, déclarée dans stdlib.h, permet de demander au système d'exécuter la commande passée en argument, comme si on l'avait vraiment tapée depuis l'invite des commandes. system() passe en fait la commande à l'interpréteur de commandes du système, le programme qui va réellement exécuter la commande. Si ce dernier est absent, la commande sera donc tout simplement ignorée.
La manière dont un programme récupère le chemin vers l'interpréteur de commandes (généralement en vue de lui passer une commande…) est bien entendu dépendante du système. Sous DOS et Windows par exemple, ce chemin est renseigné par la variable d'environnement COMSPEC. Un programme lit donc la valeur de cette variable pour connaître le chemin vers l'interpréteur de commandes (qui est normalement command.com sous DOS et cmd.exe sous Windows NT). Ainsi, lorsqu'un programme est lancé par émulation (par exemple un programme MS-DOS lancé sous Windows NT), system() pourra ne plus fonctionner car l’interpréteur de commandes renseigné par l'émulateur peut par exemple tout simplement être introuvable.
En fait, la norme ne précise même pas la manière dont comment la fonction system() doit traiter la chaîne qui lui est passée. Ainsi, dans de nombreux environnements (incluant DOS, Windows et UNIX), si la chaîne commence par le nom ou le chemin d'un fichier exécutable, system() va lancer le programme sans invoquer l'interpréteur de commandes.
Il est possible de lancer une commande du système et de récupérer, via un pointeur de fichier (FILE *), le résultat de cette commande grâce à la fonction popen() introduite par POSIX. Cette fonction s'utilise de manière similaire à fopen(), mais attend une commande à exécuter à la place d'un nom de fichier.
Code C : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include <stdio.h> #include <stdlib.h> int main(void) { FILE * pp; char buf[256]; if ((pp = popen("ls -l", "r")) == NULL) { perror("popen"); exit(EXIT_FAILURE); } while (fgets(buf, sizeof buf, pp)) fputs(buf, stdout); pclose(pp); return 0; } |
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.