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 :

Rediriger STDERR dans un fichier


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 54
    Points : 37
    Points
    37
    Par défaut Rediriger STDERR dans un fichier
    Bonjour,
    tout est dans le titre a priori ...
    Dans mon appli Linux je voudrais rediriger le flux de sortie des Erreurs dans un fichier ... y a t'il un moyen simple de faire ca ? j'ai du mal a comprendre...
    il faut que je fasse un pipe et que j'utilise dup ?
    merci d'avance pour vos reponse rapides

  2. #2
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Salut,

    Effectivement, si tu veux rediriger le flux, tu peux utiliser dup (ou dup2). Par contre, pas besoin de faire de tube. Enfin, si ton flux d'erreur se resume à ce que tu compte envoyer en faisant des perror, alors tu n'as pas besoin de faire tout ca : tu remplace ce genre d'appel directement par un fprintf qui va bien...
    Dernierement, si tu ne veux pas te fatiguer :
    Tu executes ton programme de la facon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ./mon_prog 2> mon_log
    1> redirige le flux stdout
    2> redirige le flux stderr

    Mais là, ce n'est plus du C... Et ce n'est pas portable, etc...

    ++
    Pouic
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 54
    Points : 37
    Points
    37
    Par défaut
    Merci mais comment je fais avec dup alors ? et oui je sais je suis un assisté ...

    sinon j'ai une 2eme question:
    si je fais un simple close (STDERR_FILENO); je devrais rien voir des erreurs non ?

    merci

  4. #4
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Ah la la.... Un coup d'oeil au man n'a jamais tué personne !
    SYNOPSIS
    #include <unistd.h>

    int dup(int oldfd);
    int dup2(int oldfd, int newfd);

    DESCRIPTION
    dup et dup2 créent une copie du descripteur de fichier oldfd.

    Après un appel réussi à dup ou dup2, l'ancien et le nouveau descrip-
    teurs peuvent être utilisés de manière interchangeable. Ils partagent
    les verrous, les pointeurs de position et les drapeaux. Par exemple si
    le pointeur de position est modifié en utilisant lseek sur l'un des
    descripteurs, la position est également changée pour l'autre.

    Les deux descripteurs ne partagent toutefois pas le drapeau Close-on-
    exec.

    dup utilise le plus petit numéro inutilisé pour le nouveau descripteur.

    dup2 transforme newfd en une copie de oldfd, fermant auparavant newfd
    si besoin est.
    Donc, pour associer, par exemple, stdout à un fichier particulier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
       if ((fd=open(fichier, O_WRONLY))==-1){
        perror("ouverture fichier en argument echouee\n");
        exit(1);
      }
     
      if (dup2(fd, 1)==-1){
        perror("erreur de redirection de flux: dup2 echoue\n");
        exit(2);
      }
    Pour restaurer, c'est la meme chose, mais dans l'autre sens... Sachant que stderr est associé au file descriptor 2.

    ++
    Pouic
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 54
    Points : 37
    Points
    37
    Par défaut
    Merci bien c'est niquel avec dup2 8)
    et j'ai tout compris en plus !

    @+

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Rediriger STDERR dans un fichier
    Citation Envoyé par LeBigornot
    Dans mon appli Linux je voudrais rediriger le flux de sortie des Erreurs dans un fichier ...
    freopen(). C'est standard.
    Pas de Wi-Fi à la maison : CPL

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

Discussions similaires

  1. [Batch] Rediriger stderr stdout dans fichier pour plusieurs commande
    Par Fylhan dans le forum Scripts/Batch
    Réponses: 9
    Dernier message: 07/07/2010, 00h07
  2. Rediriger STDERR vers fichier
    Par blacksnake dans le forum Langage
    Réponses: 1
    Dernier message: 05/11/2007, 00h12
  3. rediriger la sortie standard d'eclipse dans un fichier
    Par christianf dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 25/10/2007, 16h29
  4. Réponses: 11
    Dernier message: 20/09/2007, 16h58
  5. Rediriger perror dans un fichier texte
    Par sorry60 dans le forum C
    Réponses: 14
    Dernier message: 02/02/2007, 20h16

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