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 :

'fdopen' signal l'erreur: 'Illegal seek'


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Par défaut 'fdopen' signal l'erreur: 'Illegal seek'
    Bonjour ,

    Je suis en train de travailler sur un plug-in en C qui intégre une fonction permettant de passer un anti-spam dans le MTA exim , ceci est documenté avec "local_scan".

    Tout va bien, sauf que je dois momentanément désactiver "errno" en utilisant "fdopen" pour ouvrir le descripteur de fichier d'écriture en objet FILE et y écrit des données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [...]
     
    fd_file = (FILE *)fdopen(fd_out[0], "r");
    /* 'Illegal seek' */
    if (errno == ESPIPE)
        errno = 0;
     
    if ((FILE *)fd_file == NULL)
        BAIL("pipe failed", strerror(errno), "(FILE *)fd_file");
     
    [...]
    Je sais, ce n'est qu'un bout de code, mais c'est un peu long.

    Des idées, pistes ?

    Merci

  2. #2
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    C'est quoi l'erreur exacte affichée?

  3. #3
    Membre habitué
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Par défaut
    Citation Envoyé par publicStaticVoidMain Voir le message
    C'est quoi l'erreur exacte affichée?
    Juste apres l'ouverture de:

    fd_file = (FILE *)fdopen(fd_out[0], "r");

    la valeur "errno" est équal à "ESPIPE" et "strerror(errno)" dit "Illegal seek"

  4. #4
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    EN googlant,j'ai trouvé ça sur internet.

    When the underlying open file descriptor references a pipe
    or FIFO, then a call to fseek() sets errno to ESPIPE,
    returns a non-zero value and the value of the file pointer
    is unchanged.
    http://www.open-std.org/JTC1/SC22/WG...9945-1-58.html

  5. #5
    Membre habitué
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Par défaut
    Citation Envoyé par publicStaticVoidMain Voir le message
    EN googlant,j'ai trouvé ça sur internet.


    http://www.open-std.org/JTC1/SC22/WG...9945-1-58.html
    Merci

    Donc en lisant cette page et ce qui suit ci-dessous:
    An fseek() on a pipe or FIFO need not return an error. If the fseek()
    detects the error, then it must fail with errno set to ESPIPE.
    The POSIX.1 standard does not specify the state of the stream after
    such an error occurs.
    Donc le "stream" est bien ouvert correctement même si j'ai un 'Illegal seek' ?

    Car le reste du code (en isolant "ESPIPE") se déroule correctement. C'est bon ce que développe ?

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Pourquoi tous ces casts explicites, exactement?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. signal d'erreur pour la dclaration d'un tableau
    Par sandball22 dans le forum C
    Réponses: 2
    Dernier message: 20/04/2007, 11h03
  2. Réponses: 7
    Dernier message: 26/02/2007, 16h54
  3. Réponses: 3
    Dernier message: 24/11/2006, 18h20
  4. Réponses: 1
    Dernier message: 04/10/2006, 09h01

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