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 :

numéro d'unité stderr


Sujet :

Fortran

  1. #1
    Membre éclairé Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Points : 825
    Points
    825
    Par défaut numéro d'unité stderr
    bonjour à tous,

    j'ai un pett soucis pour faire une fonction de log dans mon code... voilà mon soucis, j'ai un message qui peut avoir trois attribut (error, warning ou log) et je l'affiche à l'écran et l'écris dans un fichier... (j'ai trois fichiers correspondant aux attributs...) le seul truc qui ne marche pas c'est sur l'utilisation des 'stdout' et 'stderr' lorsque le message est de type "log" je l'envoie sur la sortie standard écran (stdout, avec le numéro d'unité standard = 6 ) mais lorsque c'est un warning ou une erreur, je voudrais l'envoyer sur stderr (donc dans une console cela revien au même, mais c'est fait pour être utilisé dans un environement graphique qui seppare les deux) sauf que je ne connais pas le numéro d'unité standard de stderr...

    donc: quel est le numéro standard de stderr, ou bien comment allé écrire dessus (je précise au fait que le code tourne sous linux ou équivalent)

    bonne année à tous!
    il n'y a que ceux qui savent qui ne savent pas qu'ils savent...
    Libere-toi hacker, GNU's Not Unix!!!

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 79
    Points : 89
    Points
    89
    Par défaut sortie erreur
    Un truc qui peut fonctionner sous linux : Déclarer une unité associée à /dev/sterr.

    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    program Test
    implicit none
    open(3,file="/dev/stderr")
    write(3,*)"Sortie Err"
    write(*,*)"Sortie Normale"
    end program Test
    Une fois compilé, si je teste la commande :
    j'obtiens bien mon message d'erreur dans err.out et mon message standard à l'écran.

    Après, j'ai lu à droite à gauche des indications du genre 0 = stderr...mais bon je ne suis pas sûr que ce soit standard.

    En esperant que cette réponse te sera utile .

  3. #3
    Membre éclairé Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Points : 825
    Points
    825
    Par défaut
    j'ai trouvé une autre solution: il y a trois numéros d'unités qui sont reservés et ne peuvent pas être utilisés pour ouvrire des fichier:
    0: stderr
    5: sdtin
    6: stdout

    l'avantage d'utilisé ces numéros c'est que si tu change de système d'exploitation, il n'y a pas besoin de changer le open...

    dans ta solution, le "open(unit=3,file="/dev/stderr")" cela marche uniquement sous unix... aparament sous windows c'est "open(unit=3,file="stderr")" dqu'il faut utiliser... sinon, c'est vrai que cela marche parfaitement!!!

    merci!!!
    il n'y a que ceux qui savent qui ne savent pas qu'ils savent...
    Libere-toi hacker, GNU's Not Unix!!!

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    Tu ne dis pas quelle version de Fortran tu utilises, mais si tu utilises un compilateur récent, il est possible que tu puisses utiliser le module intrinsic ISO_FORTRAN_ENV. Ce module est défini par Fortran 2003 et il contient entre autres les variables ERROR_UNIT, INPUT_UNIT et OUTPUT_UNIT (contenant les numéros de unit correspondant).

    Si tu utilises un compilateur Fortran 95 ne fournissant pas un tel module, rien ne t'empêche de le créer toi même. Voici à titre d'exemple un tel module pour le compilateur Lahey :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    module ISO_FORTRAN_ENV
     
      ! Nonintrinsic version for Lahey/Fujitsu Fortran for Linux.
      ! See Subclause 13.8.2 of the Fortran 2003 standard.
     
      implicit NONE
      public
     
      integer, parameter :: Character_Storage_Size = 8
      integer, parameter :: Error_Unit = 0
      integer, parameter :: File_Storage_Size = 8
      integer, parameter :: Input_Unit = 5
      integer, parameter :: IOSTAT_END = -1
      integer, parameter :: IOSTAT_EOR = -2
      integer, parameter :: Numeric_Storage_Size = 32
      integer, parameter :: Output_Unit = 6
     
    end module ISO_FORTRAN_ENV
    Même si le module est Lahey/Linux, il fonctionne très bien sous Windows ainsi qu'avec le compilateur Intel. En utilisant un tel module, tu facilites la portabilité futur de ton code...

  5. #5
    Membre éclairé Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Points : 825
    Points
    825
    Par défaut
    je travaille avec gfortran, g95 et/ou ifort (j'essaye de faire en sorte que tout ces compilo ne me renvoie ni erreurs ni warning avec les option de vérification de norme f2003) mais j'ai effectivement crée un module où j'ai défini le numéros d'unités, les routines d'affichage... etc...

    il fallait juste que je mette le bon numéro devant "integer, parameter :: Error_Unit ="

    tout est nikel maintenant
    il n'y a que ceux qui savent qui ne savent pas qu'ils savent...
    Libere-toi hacker, GNU's Not Unix!!!

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

Discussions similaires

  1. Comment récupérer le numéro de l'unité de boot
    Par daniel06600 dans le forum Programmation d'OS
    Réponses: 6
    Dernier message: 23/06/2009, 22h54
  2. récuperation d'un numéro de téléphone
    Par herzleid dans le forum Delphi
    Réponses: 4
    Dernier message: 17/07/2007, 09h25
  3. TTreeView -> Comment ouvrir une unité ?
    Par DaLove dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/12/2002, 11h30
  4. Calcul des numéros de semaine d'un calendrier
    Par Invité dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 06/11/2002, 21h29
  5. Connaitre l'unitée à ajouter dans USES
    Par DelphiCool dans le forum Langage
    Réponses: 7
    Dernier message: 01/08/2002, 13h48

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