Bonjour,
J'ai un problème avec fgets(..., stdin) qui échoue lorsque mon programme ne créé pas de terminal. Plus exactement fgets fonctionne si je lance le programme depuis l'EDI ou le terminal, mais pas depuis l'explorateur de fichier.
En vérifiant errno j'obtiens le code 25 (ENOTTY : Inappropriate I/O control operation). Cela semblerait donc lié au fait qu'il n'y a pas de terminal, mais je ne sais pas comment vérifier que je peux utiliser stdin.
J'ai tenté la méthode bourrin en affichant toutes les valeurs des membres de la structure FILE, mais je n'ai rien remarqué.
Sur un site j'ai vu ce test utilisé : (fcntl(fileno(stdin), F_GETFL) != -1 || errno != EBADF) mais ça ne m'a pas permis de détecter le problème.
Voici le code utilisé :
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 char buffer[BUFSIZ] = {0}; // if (fcntl(fileno(stdin), F_GETFL) != -1 || errno != EBADF) { // syslog(LOG_ERR, "file descriptor seems valid"); // } else { // syslog(LOG_ERR, "detected invalid file descriptor"); // // } if (!fgets(buffer, BUFSIZ, stdin)) { syslog(LOG_ERR, "Errno: %d", errno); //throw std::runtime_error("fgets() failure"); }
Merci,
Ceylo
Partager