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

Fortran Discussion :

affecter une variable d'environnement en fortran


Sujet :

Fortran

  1. #1
    Membre actif
    Profil pro
    ingénieur
    Inscrit en
    novembre 2011
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : novembre 2011
    Messages : 165
    Points : 259
    Points
    259
    Par défaut affecter une variable d'environnement en fortran
    Bonjour à tous,
    J'aimerais affecter une variable d'environnement dans un programme fortran.

    Voici le code que je tente (je compile avec sunstudio f90 version 12):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
          program test
          implicit none
          character*20 var
          character*20 home
     
           call getenv('HOME',home)
           print *, "home = ",home
           call getenv('MON_ENV',var)
           print *, "MON_ENV = ",var
           call system('export MON_ENV="BONJOUR"')
           print *, "MON_ENV = ",var
     
           end program test
    Et voici la sortie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     home = /home/tiresias54
     MON_ENV =
     MON_ENV =
    Du coup mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call system('export MON_ENV="BONJOUR"')
    n'a pas l'air de fonctionner... A priori en fortran il existe des fonctione internes permettant de lire des variables d'environnement (getenv), mais pas d'écrire dedans (wtf!?).

    Auriez-vous une dée svp ?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    mars 2007
    Messages
    485
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2007
    Messages : 485
    Points : 588
    Points
    588
    Par défaut
    Bonjour,

    call system() lance un shell, qui se termine avec la fin de ce même call system().
    La variable d'environnement MON_ENV est bien affectée, mais sa portée ne dépasse pas le temps de vie du shell dans lequel elle est définie.

  3. #3
    Membre actif
    Profil pro
    ingénieur
    Inscrit en
    novembre 2011
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : novembre 2011
    Messages : 165
    Points : 259
    Points
    259
    Par défaut
    Bonjour, et merci pour ta réponse.

    Bon après moulte recherche, je pense qu'on ne peut pas faire ça en fortran :/

    du coup j'ai linké avec une petite routine C que j'ai écrit à coté (on pourrais l'améliorer, mais pas besoin pour ce que je veux faire):

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int set_var_(void)
    {
        putenv("MON_ENV=BONJOUR");
        return 0;
    }

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    mars 2007
    Messages
    485
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2007
    Messages : 485
    Points : 588
    Points
    588
    Par défaut
    Bonjour,

    Tant mieux si tu peux y parvenir via du C, mais je ne peux m'empêcher de poser la question: pourquoi diable vouloir affecter une variable d'environnement en cour d'exécution? C'est "très dangereux" au sens où si un autre processus modifier également la variable d'environnement pendant que ton programme s'exécute... et ce n'est pas du domaine de l'improbable: pense au cas où plusieurs instances de ton programme sont conjointement en cours d’exécution.

  5. #5
    Membre actif
    Profil pro
    ingénieur
    Inscrit en
    novembre 2011
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : novembre 2011
    Messages : 165
    Points : 259
    Points
    259
    Par défaut
    Désolé de ne pas avoir répondu avant.
    Mon client est grande boite industrielle qui utilise des programmes ayant des couches, surcouches et sursurcouches, écrites en C, en C++, en fortran77, en fortran 90, etc .... J'avais signalé la dangerosité de la chose au client, qui a décidé (comme souvent, et après moultes discussions) "de faire au plus simple, de toute façon on n'a pas le budget" :/ Et au final on en arrive à être obligé de faire ce genre de m... car on ne peut pas faire autrement: c'est le client qui décide. Ceci dit, quand ça plantera ça nous fera du boulot, mais bon c'est pas très gratifiant de faire ça.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Récupération d'une variable d'environnement
    Par jamy79 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 17/08/2005, 14h03
  2. NASM Tester une variable d'environnement à la "compilat
    Par Pierre Maurette dans le forum Assembleur
    Réponses: 1
    Dernier message: 10/06/2005, 13h27
  3. affecter une variable de type stringstream
    Par sorari dans le forum SL & STL
    Réponses: 3
    Dernier message: 24/03/2005, 11h14
  4. [BES] Création d'une variable d'environnement
    Par NGI80 dans le forum Autres
    Réponses: 2
    Dernier message: 17/10/2002, 07h31

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