problème avec select() en c
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

problème avec select() en c



  1. #1
    invite6ae216d1

    problème avec select() en c


    ------

    Bonjour ! voici le code source que j'ai écrit :

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/time.h>
    #include <sys/types.h>
    #include <unistd.h>
    
    void main( )
    {
        fd_set rfds;
        struct timeval tv;
        int retval;
    
    /* Surveiller stdin (fd 0) en attente d’entrées */
    
        FD_ZERO(&rfds);
        FD_SET(0, &rfds);
    
    /* Attends jusqu’à 5 secondes. */
    
        tv.tv_sec = 5;
        tv.tv_usec = 0;
        while(1)
        {
            retval = select(1, &rfds, NULL, NULL, &tv);
            if (retval == -1) perror("select()");
            else if (retval) printf("Des données sont disponibles \n");
    
    /* FD_ISSET(0, &rfds) est alors vrai. */
    
                   else printf("Aucune donnée durant les cinq secondes.\n");
         }
    
    }
    je veux à chaque itération de cette boucle faire le traitement suivant :
    - si aubout de 5 seconde j'ai rien tapé, il m'affiche "Aucune donnée.."
    - si je tape une donné avant l'expiration de 5 s, il m'affiche"donnée diponible ..."

    je dit bien pour chaque itération de la boucle.
    le problème est que la boucle sans fin va afficher infinément aucune donné.
    a priori la fonction select n'est pas exécuté une seule fois .
    j'ai besoin de votre aide

    -----

  2. #2
    polo974

    Re : problème avec select() en c

    Il faut lire la doc...




    et reconstruire rfds avant chaque select...
    Jusqu'ici tout va bien...

  3. #3
    invite6ae216d1

    Re : problème avec select() en c

    Bon,

    j'ai pas compris ! pouvez vous clarifier un peu. svp.
    comment peut on faire le reset de fd_set entre deus select()

    merci

  4. #4
    polo974

    Re : problème avec select() en c

    Tu remontes:
    Code:
        while(1)
        {
    avant le :
    Code:
        FD_ZERO(&rfds);
    Ensuite, si des données arrivent, il faut les lire, sinon, elles déclencheront toujours le select.

    Enfin, stdin est en mode cooked, donc il faut un retour à la ligne pour que ce qui est frappé soit pris en compte.
    Jusqu'ici tout va bien...

  5. A voir en vidéo sur Futura

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/03/2011, 14h49
  2. Problème utilisation WITH SELECT en VHDL
    Par thundertom dans le forum Électronique
    Réponses: 4
    Dernier message: 16/03/2011, 20h44
  3. Problème affichage NEC I-Select M4610
    Par invite9fae838f dans le forum Matériel - Hardware
    Réponses: 4
    Dernier message: 16/10/2010, 16h21
  4. comment créer une requête de type SELECT...WHERE avec vba
    Par invite33cb2e4d dans le forum Internet - Réseau - Sécurité générale
    Réponses: 5
    Dernier message: 04/08/2009, 16h26
  5. Problème avec la requete SELECT et UPDATE
    Par invite7e9df035 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 10
    Dernier message: 23/01/2009, 14h07