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.
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.
man fgets
Si ton système est compatible POSIX errno est mis à jour, donc strerror ou perror te donneront les détails.
Ah, j'imagine que oui ; installe un handler et tu seras fixé.
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é.
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.)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager