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

Linux Discussion :

descripteur de stdin != 0 ?


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 71
    Par défaut descripteur de stdin != 0 ?
    bonjour,
    j'ai un code C++ dans lequel j'attends que l'utilisateur tappe quelque chose au clavier sur l'entrée standard (avec select(), puisqu'il y a aussi du travail sur des sockets). lorsque quelque chose est tappé au clavier, j'ai pour l'instant uniquement un message qui m'avertit que quelque chose a été tapper (et donc forcément ca va boucler puisque j'écris sur l'entrée standard... ).
    j'ai dans mon code, un "#define STDIN 0", comme toujours... le code fonctionne sous Windows (avec cygwin), mais pas sous Linux (sur les bécanes de la fac, j'ai pas beaucoup d'infos là-dessus...). Est-il possible que le descripteur de l'entrée standard ne soit pas 0? parce que je ne vois pas où pourrait être l'erreur... si oui, comment faire pour que mon code marche partout?
    merci

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Tu devrais pouvoir remplacer ton define par STDIN_FILENO defini dans unistd.h (j'ignore s'il est compatible C++, cependant).

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 71
    Par défaut
    Merci beaucoup pour ton aide
    C'est compatible C++ au passage. Dans mon cas, après vérification, il s'avère que STDIN_FILENO vaut 0. Le problème ne vient pas de là, et je viens de tenter quelque chose, j'ai un début de solution... Merci en tout cas, j'aurais appris quelque chose

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    Je ne sais pas ce qu'il en est en C++, mais la norme C précise que le fichier d'en-tête <stdio.h> doit définir 3 macros :

    stderr
    stdin
    stdout
    which are expressions of type ‘‘pointer to FILE’’ that point to the FILE objects
    associated, respectively, with the standard error, input, and output streams.
    Il en estprobablement de même en C++, donc pourquoi ne pas utiliser stdin au lieu de chercher à le redéfinir par toi-même ?
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  5. #5
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par gangsoleil Voir le message
    pourquoi ne pas utiliser stdin au lieu de chercher à le redéfinir par toi-même ?
    Ce n'est pas une redefinition, mais une maniere differente d'acceder au meme flux. stdin est une macro de type FILE *, alors que certaines fonctions attendent un descripteur de fichier (par exemple, select()). On ne peut pas alors utiliser stdin, donc on utilise STDIN_FILENO.

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 71
    Par défaut
    salut,
    bin à la base, le "#define STDIN 0", c'est un truc récupéré du cours d'un prof et que j'ai vu plusieurs fois sur le net aussi... mais bon ca veut pas dire que c'est nickel pour autant.
    ensuite, je travaille avec la fonction select() et tout ca, donc le 1er paramètre est un entier. est-ce que le type FILE se caste en int? (comme ca je dirais non, mais tu dois être mieux au courant que moi ).

    enfin de toute façon, le problème ne vient pas de là, c'est au niveau des sockets que ca bloque, et ca se répercute sur le reste. merci en tout cas

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par neuro6 Voir le message
    salut,
    bin à la base, le "#define STDIN 0", c'est un truc récupéré du cours d'un prof et que j'ai vu plusieurs fois sur le net aussi... mais bon ca veut pas dire que c'est nickel pour autant.
    Ben oui surtout que la définition est faite dans les .h officiels...

    Citation Envoyé par neuro6 Voir le message
    est-ce que le type FILE se caste en int?
    Absolument pas. Le FILE est une structure contenant plein d'infos sur le fichier que tu traites. fopen() alloue cette structure et te renvoie un pointeur (une adresse mémoire). Si tu le castes en int, c'est possible mais tu récupèrera un nombre qui n'a aucune relation avec les descripteurs de fichiers bas niveau (style 0, 1 et 2). Mais il existe la fonction fileno() qui prend en entrée un FILE* et te renvoie la valeur int correspondante...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. fflush(stdin)
    Par lestat dans le forum C
    Réponses: 9
    Dernier message: 23/03/2004, 11h46
  2. fflush(stdin)
    Par BURZUM dans le forum C
    Réponses: 2
    Dernier message: 06/01/2004, 10h59
  3. TThread et waitfor - descripteur non valide
    Par code34 dans le forum Langage
    Réponses: 2
    Dernier message: 27/10/2003, 23h44
  4. Descripteur de fichier
    Par Zazeglu dans le forum C
    Réponses: 22
    Dernier message: 15/09/2003, 19h45
  5. descripteur stdin stdout
    Par discogarden dans le forum Réseau
    Réponses: 10
    Dernier message: 08/01/2003, 23h25

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