Bonjour ,
je cherche des infos et des documents sur l'utilisation de select en C. Select permet par exemple et dans mon cas d'afficher des informations à l'écran venant d'un processus externe et permettre à l'utilisateur de taper au clavier.
Merci !
Bonjour ,
je cherche des infos et des documents sur l'utilisation de select en C. Select permet par exemple et dans mon cas d'afficher des informations à l'écran venant d'un processus externe et permettre à l'utilisateur de taper au clavier.
Merci !
man select (sous unixoïde)
ou bien la version Windows (attention, son comportement n'est pas standard, puisqu'elle ignore le premier paramètre)
http://msdn.microsoft.com/library/en-us/winsock/winsock/select_2.asp
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Merci pour la réponse, je compte l'utiliser sous Linux. Je vais chercher d'autres exemples.
Merci !
Il y a une explication codee et quelques liens en bas de la page...
http://www.lowtek.com/sockets/select.html
Jc
Merci pour le dernier lien.
Mais j'ai encore des difficultés à comprendre comment l'utiliser sous linux.
Mon but est de pouvoir surveiller un évènement au clavier et si des informations sont écrites dans une FIFO.
Sous linux, fd0 représente le clavier. Mais comment ajouter une FIFO à l'ensemble des descripteurs que select doit surveiller ?
Si le clavier fait partie des descripteurs en lecture que select surveille, une fifo sera aussi en lecture ?
Elle est pas évident cette fonction!
Merci !
Le descripteur 0 représente par défaut l'entrée standard qui est généralement le clavier.fd0 représente le clavier
Select permet de gérer plusieurs descripteurs, comment est-ce que tu gères ta FIFO?
Jc
en fait ce sont des Fifos Temps réel.
donc créées dans un fichier C avec les fonctions rtf_create......
D'un autre coté, je dois dans mon application principale, gérer un affichage provenant de la lecture dans la fifo temps réel et d'un autre coté gérer la saisie au clavier par un utilisateur de données à mettre dans une autre fifo.
j'espere ne pas etre trop brouillon dans mon explication !
Merci !
voilà une utilisation avec select tiré de man auquel j'ai ajouté quelques commentaires...
Espérant que ca aide...
Jc
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 #include <stdio.h> #include <sys/time.h> #include <sys/types.h> #include <unistd.h> int main(void) { fd_set rfds,newrfds; struct timeval tv; int retval; /* On regarde l'entree standard (fd 0). */ FD_ZERO(&rfds); FD_SET(0, &rfds); /* On attend 5 seconde, a mettre a 0 pour un select non bloquant*/ tv.tv_sec = 5; tv.tv_usec = 0; /* On copie rfds car select le modifie */ newrfds = rfds; /* Le premier argument et le maximum des descripteurs +1 */ retval = select(1, &newrfds, NULL, NULL, &tv); /* tv a pu etre modifie, remettre a jour si on reutilise select!!! */ /* S'il y a une erreur */ if (retval == -1) perror("select()"); else /* Si l'utilisateur a ecrit qq chose, REMARQUE: IL DOIT AVOIR APPUYE SUR ENTREE! */ if (retval) { printf("Data is available now.\n"); /* FD_ISSET(0,&newrfds) serait vrai, mais vu que c'est le seul descripteur, on n'a pas besoin de le tester */ //pour vider l'entrée standard while((int) '\n'!= getchar()) ; } else printf("No data within five seconds.\n"); return 0; }
J'ai plus ou moins compris comment fonctionne Select avec le clavier mais j'ai du mal à comprendre comment lier la fifo au select. Je dois rajouter le descripteur de la fifo a l'ensemble des descripteurs que surveille Select mais je ne vois pas trop la forme que cela a.
Embetant aussi, ma saisie est prévue pour etre non canonique (termios.h) afin que la touche saisie serve de validation......mais apparement il faut absolument appuyer sur une touche pour que select détecte que l'on veut saisir au clavier, et cette touche n'est pas prise en compte....
Merci pour le code je vais tacher de me débrouiller
++
Partager