select 可以感知文件表述符集合中的变化,如果办fd0(即标准输入)放入select的read fd set,发现只有按回车的时候select才会返回。查了下要把终端的缓冲大小设为1,这样就能实现击键后马上反应了。

#include <stdio.h>
#include <stdlib.h> #include <unistd.h>
#include <errno.h>
#include <termio.h> #include <sys/time.h>
#include <sys/types.h> #define BUF_SIZE 256 void setup_terminal(struct termios* old_args); void reset_terminal(struct termios* old_args); int main() {
struct termios old_args; setup_terminal(&old_args); fd_set rfds;
int sres = ; char buffer[BUF_SIZE];
int nread = ; for (;;) {
/* reset read file descriptor set */
FD_ZERO(&rfds);
/* add standard input file descriptor to the set */
FD_SET(, &rfds); /* do blocking select */
printf("\nselect begin\n");
sres = select( + , &rfds, NULL, NULL, NULL);
printf("\nselect return\n"); if (sres < ) {
perror("select error");
break;
} else if (sres == ) {
/* should not be here for blocked select without timeout*/
printf("select timeout\n");
} else {
if (FD_ISSET(, &rfds)) {
nread = read(, buffer, sizeof(buffer)-);
if (nread <= ) {
perror("read error");
break;
}
buffer[nread] = '\0';
printf("read string(%d): %s\n", nread, buffer);
}
} }
reset_terminal(&old_args);
return ;
} void setup_terminal(struct termios* old_args) {
tcgetattr(, old_args); struct termios new_args = *old_args;
new_args.c_lflag &= ~ICANON;
new_args.c_cc[VMIN] = ; tcsetattr(, TCSANOW, &new_args);
} void reset_terminal(struct termios* old_args) {
tcsetattr(, TCSANOW, old_args);
}

记得很早之前也一致想实现这个功能,终于如愿,虽然和socket编程没什么太大关系。

参考:

http://tieba.baidu.com/p/685575698

最新文章

  1. 转发 XHTML 和 DOCTYPE 切换(MSDN)
  2. 拓扑编号 vijos1790
  3. Java MD5加密工具类
  4. 使用ExposedObject对Asp.net MVC中匿名类型的JsonResult做单元测试
  5. Response.Redirect在新窗口打开网页
  6. nice命令
  7. xyiyy开始写博客了
  8. USG 2210
  9. 一款新型的智能家居WiFi选择方案——SimpleWiFi在无线智能家居中的应用
  10. 基于j2ee的程序代写MVC架构
  11. ASP.NET 5+EntityFramework 7
  12. win2008服务器,fastCGI完美设置教程
  13. 骗子网站,X毛都没有,骗我九十九
  14. oracle用户与表空间操作
  15. Java Web项目(Extjs)报错八
  16. Android监听手机网络变化
  17. 注册ActiveX控件
  18. 关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序。
  19. Eureka客户端注册过程源码解析
  20. LINQ 获取当前数组中出现次数最多的元素

热门文章

  1. 洛谷P1251 餐巾计划问题(费用流)
  2. HTTP上下文表单内容转为实体对象
  3. Qt 学习之路 2(71):线程简介
  4. 康奈尔大学CFD课程
  5. git 下载 安装
  6. UVA - 11584 DP 最少线段覆盖
  7. js 递归思想 处理后台多维数组的数据 之 完美契合
  8. linux 运维基础之VM中安装centos6.X
  9. (转)详解Linux中SSH远程访问控制
  10. 使用windows的BitLocker+VHD加密“文件夹”