《linux下使用poll读取terminal终端上等待回车后送入的一行字符串》/*
* Copyright (c) 2009 Luther Ge
*/
#include
#include
static struct termios tio_orig;
int main(void)
{
char buf[10];
struct termios tio_new;
tcgetattr(0,&tio_orig);
tio_new=tio_orig;
tio_new.c_lflag &= ~(ICANON|ECHO); /* Clear ICANON and ECHO. */
tio_new.c_cc[VMIN] = 1;
tio_new.c_cc[VTIME] = 0;
tcsetattr(0,TCSANOW,&tio_new);
int retval = read(0, buf, 1);
if (retval <= 0)
fprintf(stderr, "[luther.gliethttp] : error\n");
else fprintf(stderr, "[luther.gliethttp] : %c\n", buf[0]);
tcsetattr(0,TCSANOW,&tio_orig);
}
使用poll机制1
/*
* Copyright (c) 2009 Luther Ge
*/
#include
#include
#include
#include
static struct termios tio_orig;
int main(void)
{
struct pollfd pfds;
char buf[10];
struct termios tio_new;
tcgetattr(0, &tio_orig);
tio_new = tio_orig;
tio_new.c_lflag &= ~(ICANON|ECHO); /* Clear ICANON and ECHO. */
tio_new.c_cc[VMIN] = 1;
tio_new.c_cc[VTIME] = 0;
tcsetattr(0, TCSANOW, &tio_new);
memset(&pfds, 0, sizeof(pfds));
pfds.fd = 0;
pfds.events = POLLIN;
poll(&pfds, 1, 2*1000);
if (pfds.revents & POLLIN) {
read(0, buf, 1);
tcflush(0, TCIFLUSH); // [luther.gelitthtp]清空stdin输入的多余其他数据
printf("=========[luther.gliethttp]=========\ninput char is : %c\n", buf[0]);
}
tcsetattr(0,TCSANOW,&tio_orig);
return 0;
}
使用poll机制2
/*
* Copyright (c) 2009 Luther Ge
*/
#include
#include
#include
#include
static struct termios tio_orig;
int main(void)
{
struct pollfd pfds;
char buf[10];
struct termios tio_new;
tcgetattr(0, &tio_orig);
tio_new = tio_orig;
tio_new.c_lflag &= ~(ICANON|ECHO); /* Clear ICANON and ECHO. */
tio_new.c_cc[VMIN] = 1;
tio_new.c_cc[VTIME] = 0;
tcsetattr(0, TCSANOW, &tio_new);
memset(&pfds, 0, sizeof(pfds));
pfds.fd = 0;
pfds.events = POLLIN;
for (;;) {
poll(&pfds, 1, 0);
if (pfds.revents & POLLIN) {
read(0, buf, 1);
tcflush(0, TCIFLUSH); // [luther.gelitthtp]清空stdin输入的多余其他数据
printf("=========[luther.gliethttp]=========\ninput char is : %c\n", buf[0]);
}
usleep(100*1000);
}
tcsetattr(0,TCSANOW,&tio_orig);
return 0;
}
阅读(2711) | 评论(0) | 转发(0) |