IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Recherche du répertoire personnel


Sujet :

C

  1. #21
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    La commande (printenv) existe, certes mais l'utiliser pour récupérer la valeur de HOME ???

    - un system("printenv") tout bête va cracher des tonnes de lignes sur la sortie standard (pur affichage) !
    - un popen("printenv","r") et lire, ligne à ligne, jusqu'à trouver un "HOME=..." et la traiter ?

    un getenv("HOME") me semble plus approprié
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  2. #22
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par plxpy Voir le message
    La commande (printenv) existe, certes mais l'utiliser pour récupérer la valeur de HOME ???
    Non, je répondais à :

    J'ai fait le petit programme sous Linux :
    (post #7)

    Je disais simplement que c'est inutile, puisque la commande printenv existe..


    Maintenant, pour récupérer la valeur, oui le getenv est ce qu'il faut..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #23
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    t'as raison je viens de vérifier dans mes fichiers c'est "HOME" ..



    N'empêche que la commande est là ..
    Oui, mais pourquoi mon programme plante si je mets "HOME" ?
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  4. #24
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    Citation Envoyé par plxpy Voir le message
    La commande (printenv) existe, certes mais l'utiliser pour récupérer la valeur de HOME ???

    - un system("printenv") tout bête va cracher des tonnes de lignes sur la sortie standard (pur affichage) !
    - un popen("printenv","r") et lire, ligne à ligne, jusqu'à trouver un "HOME=..." et la traiter ?

    un getenv("HOME") me semble plus approprié
    Très intéressant, mais sous windows ça marche ?
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  5. #25
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Parce que getenv ne renvoie pas un int (par défaut si la fonction n'a pas été définie) mais un char *.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    plx@sony:~$ gcc home.c 
    home.c: In function ‘main’:
    home.c:5: warning: format ‘%s’ expects type ‘char *’, but argument 3 has type ‘int’
    ~$plx@sony:~$ more home.c
    #include <stdio.h>
    int main()
    {
        fprintf(stdout,"%s\n",getenv("HOME"));
    }
     
    plx@sony:~$
    Et ça si tu n'inclus pas stdlib.h comme indiqué précédemment ...
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  6. #26
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Très intéressant, mais sous windows ça marche ?
    Oui si ... HOME est une variable d'environnement "standard". Je viens de vérifier et sous Vista, apparemment, si on ne la définit pas explicitement (Panneau de configuration/.../Paramètres avancés), elle n'existe pas... Dans ce cas là, getenv doit renvoyer NULL ou chaine vide
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  7. #27
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    J'y suis arrvé !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
            printf("%s\n",getenv("HOME"));
     
            return 0;
    }
    getenv semble génial ! Je vais simplifier mon code

    Il y a HOMEPATH pour windows. Non ?
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  8. #28
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par troumad Voir le message
    getenv semble génial ! Je vais simplifier mon code

    ben vi

    Disons que je n'avais pas regadé le forum C depuis 10 jours, mais quand j'ai vu ton post et le fait que tu voulais mettre ton code dans les FAQs, ça m'a paru un peu...

    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  9. #29
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Et si je repars du besoin initial (pouvoir stocker dans un répertoire des "choses" entre deux utilisations d'une même application, en se servant d'une variable d'environnement "commune" entre 2 (au moins) OS différents, c'est ça ?) il n'y a pas trop le choix.

    Tu n'as pas de variable standard commune entre Windows et Linux (j'avais un moment espéré que HOME soit commune : même pas).

    Alors :

    - soit tu "spécialises" ton code à coup de #ifdef au moment où tu récupères le contenu de la variable d'environnement (HOME pour Linux, APPDATA ou qqch dans le genre pour Windows) et ensuite, hors #ifdef, tu fais ce que tu as à faire

    - soit tu "imposes" que l'utilisateur crée une variable d'environnement "MON_APPLI_HOME" en y mettant le répertoire à utiliser et tu n'as même pas besoin des #ifdef. Cela dit, les utilisateurs sachant utiliser correctement les variables d'environnement ...

    Perso, je pencherais pour la première approche
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  10. #30
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    Je code que j'ai proposé a son avantage : lister les variables d'environnements.
    getenv devrait être indiqué dans cette entrée de FAQ ! Je vais vite faire la remarque !
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  11. #31
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par plxpy Voir le message
    Perso, je pencherais pour la première approche
    moi ausi, avec une approche hyper-simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #ifdef __WIN32
    #define VARHOME "APPDATA"
    #else
    #define VARHOME "HOME"
    #endif
     
     
    h = getenv("VARHOME");
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  12. #32
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par troumad Voir le message
    Je code que j'ai proposé a son avantage : lister les variables d'environnements.
    getenv devrait être indiqué dans cette entrée de FAQ ! Je vais vite faire la remarque !
    comme je l'ai signalé, printenv fait ceci, et comme l'a signalé plxpy system(printenv) marche aussi
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  13. #33
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    moi ausi, avec une approche hyper-simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #ifdef __WIN32
    #define VARHOME "APPDATA"
    #else
    #define VARHOME "HOME"
    #endif
     
     
    h = getenv("VARHOME");
    Je suis sur (ce n'est pas du tout ironique) que tu voulais écrire

    C'est vrai qu'entre les ", les $, on peut commencer à se prendre les pieds dans le tapis pour un problème, somme toute, fort simple !
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  14. #34
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par plxpy Voir le message
    Je suis sur (ce n'est pas du tout ironique) que tu voulais écrire
    Oui..

    Encore la vitesse (et la non-réfelxion) qui a(ont) frappé(s)..

    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  15. #35
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    J'avais mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #ifdef __linux__
     
    #define HOME     "HOME"
    #define MEM_PROG "HOME"
     
    #else
     
    #define HOME     "HOMEPATH"
    #define MEM_PROG "APPDATA"
     
    #endif
    win32 me fait peur à cause de win64...
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  16. #36
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Macro Visual Studio 2005

    • _WIN32 : Defined for applications for Win32 and Win64. Always defined.
    • _WIN64 : Defined for applications for Win64.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. crontab et répertoire personnel
    Par troumad dans le forum Administration système
    Réponses: 1
    Dernier message: 08/03/2009, 16h47
  2. Recherche de répertoire
    Par samuel539 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 25/02/2009, 10h06
  3. [linux] connaitre le répertoire personnel
    Par troumad dans le forum C
    Réponses: 5
    Dernier message: 18/06/2007, 13h39
  4. rechercher un répertoire vide
    Par palcoquoz dans le forum Scripts/Batch
    Réponses: 12
    Dernier message: 15/06/2007, 16h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo