À l'aide de l'entrée standard avec select() en C
J'ai le programme suivant:
#include <stdio.h>
#define STDIN 0
int main()
{
fd_set fds;
int maxfd;
//sd is a UDP socket
maxfd = (sd > STDIN)?sd:STDIN;
while(1){
FD_ZERO(&fds);
FD_SET(sd, &fds);
FD_SET(STDIN, &fds);
select(maxfd+1, &fds, NULL, NULL, NULL);
if (FD_ISSET(STDIN, &fds)){
printf("\nUser input - stdin");
}
if (FD_ISSET(sd, &fds)){
//socket code
}
}
}
Le problème que j'ai est qu'une fois que l'entrée est détecté sur l'entrée standard STDIN, le message "saisie de l'Utilisateur - stdin" continue à l'impression...pourquoi ne pas imprimer une seule fois et sur la prochaine boucle while vérifier les descripteurs d'entrée ?
Grâce.
OriginalL'auteur Jake | 2012-04-18
Vous devez vous connecter pour publier un commentaire.
La
select
fonction ne vous raconte pas quand il est entré à la disposition. Si vous n'avez pas réellement consommer, sélectionnez-le, continuera de tomber tout droit.OriginalL'auteur Marcelo Cantos
Parce que vous n'êtes pas la lecture de l'entrée standard STDIN, donc la prochaine fois autour de la boucle il y a toujours quelque chose à lire.
Vous avez besoin de lire STDIN pour l'en empêcher.
Pas de. La console est juste pour envoyer l'entrée à toi de programme et de vous programme est de ne pas le lire. L'entrée est dans une mémoire tampon jusqu'à ce qu'il est lu par votre code.
OriginalL'auteur Ed Heal