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

Bibliothèques, systèmes et outils C Discussion :

Cause erreur de fgets(stdin).


Sujet :

Bibliothèques, systèmes et outils C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    etudiant info
    Inscrit en
    Mars 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : etudiant info

    Informations forums :
    Inscription : Mars 2016
    Messages : 32
    Points : 30
    Points
    30
    Par défaut Cause erreur de fgets(stdin).
    Bonjour, j'ai récemment récupéré un code C assez conséquent. A l’exécution, un appel à fgets sur stdin renvoie NULL et ferror(stdin) renvoie true ; toutefois je ne trouve pas de piste pour interpréter cette erreur ! Merci d'avance.

  2. #2
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    man fgets

    Si ton système est compatible POSIX errno est mis à jour, donc strerror ou perror te donneront les détails.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    etudiant info
    Inscrit en
    Mars 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : etudiant info

    Informations forums :
    Inscription : Mars 2016
    Messages : 32
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par Matt_Houston Voir le message
    man fgets

    Si ton système est compatible POSIX errno est mis à jour, donc strerror ou perror te donneront les détails.
    Ok j'étais pas sûr, mon man ne me parle pas de errno pour fgets. Il m'indique interrupted system call. Il est possible que mon processus reçoive un SIGCHLD pendant le fgets, est-ce que cela pourrait être la cause de l'erreur ?

  4. #4
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Ah, j'imagine que oui ; installe un handler et tu seras fixé.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    etudiant info
    Inscrit en
    Mars 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : etudiant info

    Informations forums :
    Inscription : Mars 2016
    Messages : 32
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par Matt_Houston Voir le message
    Ah, j'imagine que oui ; installe un handler et tu seras fixé.
    Oui je pense que c'est justement le handler qui fait planter le fgets. Mais comment puis-je régler ce problème si j'ai à la fois besoin de mon fgets et de mon handler ?

  6. #6
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Si tu contrôles le handler, tu sais si c'est le signal qui a produit l'erreur. Tu peux donc lever un drapeau et rappeler fgets dans la foulée une fois que la séquence principale a récupéré la main.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    etudiant info
    Inscrit en
    Mars 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : etudiant info

    Informations forums :
    Inscription : Mars 2016
    Messages : 32
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par Matt_Houston Voir le message
    Si tu contrôles le handler, tu sais si c'est le signal qui a produit l'erreur. Tu peux donc lever un drapeau et rappeler fgets dans la foulée une fois que la séquence principale a récupéré la main.
    Ok je vois peut-être l'idée (activer un booléen avant le fgets et le désactiver à la fin) même si je ne vois pas comment on peut être sûr à 100%.
    De plus, en constatant le fonctionnement de mon shell, je constate que le fgets semble bloquer le handler SIGCHLD qui est pris en compte à la fin du fgets, le fgets est donc prioritaire et je me demande comment cela est implémenté.

  8. #8
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Bonjour,

    Si on veut un Handler de signal qui ne provoque aucun arrêt dans l'application, le plus "simple" c'est :
    * créer un thread qui ne fait rien for(;;) { wait(); }.
    * masquer tous les signaux pour tous les threads, sauf pour celui là.
    * Quand le signal va arriver, c'est forcément le "wait()" qui sera celui interrompu (sinon c'est une fonction quelconque d'un quelconque thread qui exécute une commande "cancellable" telle que que l'est fgets()).
    * Les handlers de signaux font normalement leur boulot (ils seront toujours sur le thread qui ne fait rien.)

Discussions similaires

  1. Cause erreur d'exécution
    Par cluster26 dans le forum VBA Access
    Réponses: 2
    Dernier message: 11/03/2011, 12h52
  2. cause erreur iostream.h
    Par bassemb dans le forum C++
    Réponses: 2
    Dernier message: 10/12/2008, 13h44
  3. recherche cause erreur EAccessViolation
    Par oiapoque dans le forum Delphi
    Réponses: 12
    Dernier message: 20/06/2006, 10h07
  4. [Dates] fgets(STDIN) timeout ?
    Par FFF dans le forum Langage
    Réponses: 1
    Dernier message: 04/10/2005, 10h58
  5. [ASP]resultSet = "" cause erreur???
    Par DEC dans le forum ASP
    Réponses: 2
    Dernier message: 19/07/2004, 17h56

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