FAQ CConsultez toutes les FAQ

Nombre d'auteurs : 27, nombre de questions : 175, dernière mise à jour : 17 décembre 2010  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.


SommaireDivers bisCommunication avec l'environnement (5)
précédent sommaire suivant
 

Pour accéder aux paramètres de la ligne de commandes, il suffit de déclarer la fonction main() de la façon suivante :

Code C :
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 :

  • le nom de l'exécutable
  • le chemin complet de l'exécutable
  • une chaîne vide
  • autre chose !

Mais il est garanti que le contenu de argv[0] ne sera jamais NULL (ce qui implique que argc vaut toujours au moins 1…).

Mis à jour le 1er février 2003 gl LFE

Comment récupérer une variable d'environnement ?

La fonction getenv() permet de lire la valeur d'une variable d'environnement.

Code C :
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; 
}
Normalement la première existe sous Linux et la seconde sous Windows. La fonction retourne NULL si la variable n'existe pas.

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 ?

Mis à jour le 2 février 2003 gl joellel LFE troumad

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 :
1
2
3
4
int main(int argc, char * argv[], char * envp[]) 
{ 
    return 0; 
}
envp pointe sur un tableau de pointeurs vers des chaînes de caractères, chacune représentant une variable d'environnement sous la forme : « nom=valeur », où nom correspond au nom de la variable et valeur à sa valeur. Le dernier élément du tableau pointé par envp contient NULL. Voici un petit programme qui liste les variables en utilisant le troisième argument de main :

Code c :
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; 
}
Pour lire juste une variable d'environnement, il est plus simple de passer par Comment récupérer une variable d'environnement ?

Mis à jour le 2 février 2003 gl joellel LFE troumad

Comment accéder aux paramètres de la ligne de commandes ?

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.

Mis à jour le 27 juillet 2008 Melem

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 :
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; 
}

Mis à jour le 20 septembre 2004 gl

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 ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les 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 © 2014 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.

 
 
 
 
Partenaires

PlanetHoster
Ikoula