je cherche dans un thread à récupérer la frappe de n'importe quel
caractère au clavier, au début je pensai utiliser getc, mais cette
fonction n'est pas implémenté sous linux.
[ snip le reste sur lequel je n'ai pas encore assez de recul... ]
je cherche dans un thread à récupérer la frappe de n'importe quel
caractère au clavier, au début je pensai utiliser getc, mais cette
fonction n'est pas implémenté sous linux.
[ snip le reste sur lequel je n'ai pas encore assez de recul... ]
je cherche dans un thread à récupérer la frappe de n'importe quel
caractère au clavier, au début je pensai utiliser getc, mais cette
fonction n'est pas implémenté sous linux.
[ snip le reste sur lequel je n'ai pas encore assez de recul... ]
Bonsoir à tous,
je débute en c, et j'utilise anjuta avec une distrib ubuntu.
je cherche dans un thread à récupérer la frappe de n'importe quel
caractère au clavier, au début je pensai utiliser getc, mais cette
fonction n'est pas implémenté sous linux.
ce que je veux obtenir c'est que la frappe d'une seule touche, la lettre
D par exemple, me rende de suite la main.
En attendant de vous lire, bonne nuit à tous et A+
Bonsoir à tous,
je débute en c, et j'utilise anjuta avec une distrib ubuntu.
je cherche dans un thread à récupérer la frappe de n'importe quel
caractère au clavier, au début je pensai utiliser getc, mais cette
fonction n'est pas implémenté sous linux.
ce que je veux obtenir c'est que la frappe d'une seule touche, la lettre
D par exemple, me rende de suite la main.
En attendant de vous lire, bonne nuit à tous et A+
Bonsoir à tous,
je débute en c, et j'utilise anjuta avec une distrib ubuntu.
je cherche dans un thread à récupérer la frappe de n'importe quel
caractère au clavier, au début je pensai utiliser getc, mais cette
fonction n'est pas implémenté sous linux.
ce que je veux obtenir c'est que la frappe d'une seule touche, la lettre
D par exemple, me rende de suite la main.
En attendant de vous lire, bonne nuit à tous et A+
3/ utiliser curses
Une autre possibilité, utiliser getch() de l'API curses/ncurses.
3/ utiliser curses
Une autre possibilité, utiliser getch() de l'API curses/ncurses.
3/ utiliser curses
Une autre possibilité, utiliser getch() de l'API curses/ncurses.
Alex a écrit :Bonsoir à tous,
je débute en c, et j'utilise anjuta avec une distrib ubuntu.
je cherche dans un thread à récupérer la frappe de n'importe quel
caractère au clavier, au début je pensai utiliser getc, mais cette
fonction n'est pas implémenté sous linux.
ce que je veux obtenir c'est que la frappe d'une seule touche, la lettre
D par exemple, me rende de suite la main.
En attendant de vous lire, bonne nuit à tous et A+
C'est pas vraiment un problème de C, mais un problème d'API. Est-ce que
tu fais du X11 ou du terminal texte? Si c'est du texte, il faut utiliser
changer les paramètres du terminal pour le faire passer en mode raw
(i.e. il n'interprète pas les séquences), non bloquant, et sans echo, et
enfin lire les caractères.
Il y a plusieurs façon de faire cela:
1/ utiliser termios
#include <termios.h>
int l_getch (void) {
static struct termios term, back;
int ret = -1;
tcgetattr (0, &term); //get term info
memcpy (&back, &term, sizeof(term));
term.c_lflag &= ~(ICANON|ECHO); //change term attr
term.c_cc[VTIME] = 1; //latency
term.c_cc[VMIN] = 1; //nb char
tcsetattr(0, TCSANOW, &term); //change stdin attr
ret = getchar();
tcsetattr(0, TCSANOW, &back); //restore attr
return ret;
}
2/ passer par ioctl
On peut aussi faire la même chose ne remplacant tcgetattr() par un appel
direct à ioctl():
#include <sys/ioctl.h>
ioctl(fd, TIOCGETA, &t);
t.c_lflag &= ~(ICANON|ECHO);
t.c_cc[VMIN] = 1;
t.c_cc[VTIME] = 1;
ioctl(fd, TIOCSETA, &t);
3/ utiliser curses
Une autre possibilité, utiliser getch() de l'API curses/ncurses.
Dans tous les cas il faut se référer à la doc de l'api:
1/ man termios
2/ man ioctl, man ioctl_list
3/ man ncurses
Maintenant tu parles de thread.. et olà il faut faire gaffe à la
ré-entrance (en gros qu'un seul thread accède au clavier à la fois).
sam (use the "man", man!)
Alex a écrit :
Bonsoir à tous,
je débute en c, et j'utilise anjuta avec une distrib ubuntu.
je cherche dans un thread à récupérer la frappe de n'importe quel
caractère au clavier, au début je pensai utiliser getc, mais cette
fonction n'est pas implémenté sous linux.
ce que je veux obtenir c'est que la frappe d'une seule touche, la lettre
D par exemple, me rende de suite la main.
En attendant de vous lire, bonne nuit à tous et A+
C'est pas vraiment un problème de C, mais un problème d'API. Est-ce que
tu fais du X11 ou du terminal texte? Si c'est du texte, il faut utiliser
changer les paramètres du terminal pour le faire passer en mode raw
(i.e. il n'interprète pas les séquences), non bloquant, et sans echo, et
enfin lire les caractères.
Il y a plusieurs façon de faire cela:
1/ utiliser termios
#include <termios.h>
int l_getch (void) {
static struct termios term, back;
int ret = -1;
tcgetattr (0, &term); //get term info
memcpy (&back, &term, sizeof(term));
term.c_lflag &= ~(ICANON|ECHO); //change term attr
term.c_cc[VTIME] = 1; //latency
term.c_cc[VMIN] = 1; //nb char
tcsetattr(0, TCSANOW, &term); //change stdin attr
ret = getchar();
tcsetattr(0, TCSANOW, &back); //restore attr
return ret;
}
2/ passer par ioctl
On peut aussi faire la même chose ne remplacant tcgetattr() par un appel
direct à ioctl():
#include <sys/ioctl.h>
ioctl(fd, TIOCGETA, &t);
t.c_lflag &= ~(ICANON|ECHO);
t.c_cc[VMIN] = 1;
t.c_cc[VTIME] = 1;
ioctl(fd, TIOCSETA, &t);
3/ utiliser curses
Une autre possibilité, utiliser getch() de l'API curses/ncurses.
Dans tous les cas il faut se référer à la doc de l'api:
1/ man termios
2/ man ioctl, man ioctl_list
3/ man ncurses
Maintenant tu parles de thread.. et olà il faut faire gaffe à la
ré-entrance (en gros qu'un seul thread accède au clavier à la fois).
sam (use the "man", man!)
Alex a écrit :Bonsoir à tous,
je débute en c, et j'utilise anjuta avec une distrib ubuntu.
je cherche dans un thread à récupérer la frappe de n'importe quel
caractère au clavier, au début je pensai utiliser getc, mais cette
fonction n'est pas implémenté sous linux.
ce que je veux obtenir c'est que la frappe d'une seule touche, la lettre
D par exemple, me rende de suite la main.
En attendant de vous lire, bonne nuit à tous et A+
C'est pas vraiment un problème de C, mais un problème d'API. Est-ce que
tu fais du X11 ou du terminal texte? Si c'est du texte, il faut utiliser
changer les paramètres du terminal pour le faire passer en mode raw
(i.e. il n'interprète pas les séquences), non bloquant, et sans echo, et
enfin lire les caractères.
Il y a plusieurs façon de faire cela:
1/ utiliser termios
#include <termios.h>
int l_getch (void) {
static struct termios term, back;
int ret = -1;
tcgetattr (0, &term); //get term info
memcpy (&back, &term, sizeof(term));
term.c_lflag &= ~(ICANON|ECHO); //change term attr
term.c_cc[VTIME] = 1; //latency
term.c_cc[VMIN] = 1; //nb char
tcsetattr(0, TCSANOW, &term); //change stdin attr
ret = getchar();
tcsetattr(0, TCSANOW, &back); //restore attr
return ret;
}
2/ passer par ioctl
On peut aussi faire la même chose ne remplacant tcgetattr() par un appel
direct à ioctl():
#include <sys/ioctl.h>
ioctl(fd, TIOCGETA, &t);
t.c_lflag &= ~(ICANON|ECHO);
t.c_cc[VMIN] = 1;
t.c_cc[VTIME] = 1;
ioctl(fd, TIOCSETA, &t);
3/ utiliser curses
Une autre possibilité, utiliser getch() de l'API curses/ncurses.
Dans tous les cas il faut se référer à la doc de l'api:
1/ man termios
2/ man ioctl, man ioctl_list
3/ man ncurses
Maintenant tu parles de thread.. et olà il faut faire gaffe à la
ré-entrance (en gros qu'un seul thread accède au clavier à la fois).
sam (use the "man", man!)
On 2010-02-06, Alex wrote:je cherche dans un thread à récupérer la frappe de n'importe quel
caractère au clavier, au début je pensai utiliser getc, mais cette
fonction n'est pas implémenté sous linux.
Tu te trompes, getc() fait partie de la bibliothèque standard et ton
système l'implémente au travers de la glibc. Tape donc man getc dans un
terminal.[ snip le reste sur lequel je n'ai pas encore assez de recul... ]
On 2010-02-06, Alex wrote:
je cherche dans un thread à récupérer la frappe de n'importe quel
caractère au clavier, au début je pensai utiliser getc, mais cette
fonction n'est pas implémenté sous linux.
Tu te trompes, getc() fait partie de la bibliothèque standard et ton
système l'implémente au travers de la glibc. Tape donc man getc dans un
terminal.
[ snip le reste sur lequel je n'ai pas encore assez de recul... ]
On 2010-02-06, Alex wrote:je cherche dans un thread à récupérer la frappe de n'importe quel
caractère au clavier, au début je pensai utiliser getc, mais cette
fonction n'est pas implémenté sous linux.
Tu te trompes, getc() fait partie de la bibliothèque standard et ton
système l'implémente au travers de la glibc. Tape donc man getc dans un
terminal.[ snip le reste sur lequel je n'ai pas encore assez de recul... ]
je débute en c, et j'utilise anjuta avec une distrib ubuntu.
je cherche dans un thread à récupérer la frappe de n'importe quel
caractère au clavier, au début je pensai utiliser getc, mais cette
fonction n'est pas implémenté sous linux.
je débute en c, et j'utilise anjuta avec une distrib ubuntu.
je cherche dans un thread à récupérer la frappe de n'importe quel
caractère au clavier, au début je pensai utiliser getc, mais cette
fonction n'est pas implémenté sous linux.
je débute en c, et j'utilise anjuta avec une distrib ubuntu.
je cherche dans un thread à récupérer la frappe de n'importe quel
caractère au clavier, au début je pensai utiliser getc, mais cette
fonction n'est pas implémenté sous linux.
Globalement, curses ou assimile est un bon compromis...
Globalement, curses ou assimile est un bon compromis...
Globalement, curses ou assimile est un bon compromis...
L'objectif est de concevoir un bout de programme qui lit des commandes
qui arrivent dans un fichier texte, et qui les envoie sur un port série
vers un dispositif électronique d'asservissement.
Le thread devrait servir à pouvoir interrompre le traitement si on appui
sur une touche particulière du clavier.
L'objectif est de concevoir un bout de programme qui lit des commandes
qui arrivent dans un fichier texte, et qui les envoie sur un port série
vers un dispositif électronique d'asservissement.
Le thread devrait servir à pouvoir interrompre le traitement si on appui
sur une touche particulière du clavier.
L'objectif est de concevoir un bout de programme qui lit des commandes
qui arrivent dans un fichier texte, et qui les envoie sur un port série
vers un dispositif électronique d'asservissement.
Le thread devrait servir à pouvoir interrompre le traitement si on appui
sur une touche particulière du clavier.
Vivien MOREAU a écrit :On 2010-02-06, Alex wrote:au début je pensai utiliser getc, mais cette
fonction n'est pas implémenté sous linux.
Tu te trompes, getc() fait partie de la bibliothèque standard et ton
système l'implémente au travers de la glibc. Tape donc man getc dans un
terminal.
Meci pour ta réponse, en effet tu as raison, j'avai oublié de mettre à
jour le fichier MAKE avec -lncurses
Vivien MOREAU a écrit :
On 2010-02-06, Alex wrote:
au début je pensai utiliser getc, mais cette
fonction n'est pas implémenté sous linux.
Tu te trompes, getc() fait partie de la bibliothèque standard et ton
système l'implémente au travers de la glibc. Tape donc man getc dans un
terminal.
Meci pour ta réponse, en effet tu as raison, j'avai oublié de mettre à
jour le fichier MAKE avec -lncurses
Vivien MOREAU a écrit :On 2010-02-06, Alex wrote:au début je pensai utiliser getc, mais cette
fonction n'est pas implémenté sous linux.
Tu te trompes, getc() fait partie de la bibliothèque standard et ton
système l'implémente au travers de la glibc. Tape donc man getc dans un
terminal.
Meci pour ta réponse, en effet tu as raison, j'avai oublié de mettre à
jour le fichier MAKE avec -lncurses