免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1407 | 回复: 6
打印 上一主题 下一主题

键盘输入处理问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-18 12:14 |只看该作者 |倒序浏览
如果我想让程序处于无键盘输入或是输入不等于某个特定键时 循环执行代码  一旦输入为特定键时程序结束

论坛徽章:
0
2 [报告]
发表于 2005-11-18 13:00 |只看该作者
用 select 加 read
或许可以吧, 我没试过:wink:

论坛徽章:
0
3 [报告]
发表于 2005-11-18 14:20 |只看该作者
e文水平有限 没看懂select的用法 牛人 给个例子让小弟摸索下

论坛徽章:
0
4 [报告]
发表于 2005-11-18 17:04 |只看该作者
getchar()用来从标准输入设备中读取一个字符
调用它后会一直等待直到有输入才结束

能不能在程序内部实现将其结束

大家多帮帮忙  谢谢了

论坛徽章:
0
5 [报告]
发表于 2005-11-18 17:09 |只看该作者
原帖由 zh_manyu 于 2005-11-18 17:04 发表
getchar()用来从标准输入设备中读取一个字符
调用它后会一直等待直到有输入才结束

能不能在程序内部实现将其结束

大家多帮帮忙  谢谢了


不知道能不能用fcntl把stdin也设置成非阻塞的。就能解决问题了,我来试试

论坛徽章:
0
6 [报告]
发表于 2005-11-18 17:21 |只看该作者

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <fcntl.h>

  5. int main(int argc, char **argv)
  6. {
  7.         int flags;
  8.         int a;

  9.         if( (flags=fcntl(fileno(stdin), F_GETFL, 0)) < 0){
  10.                 perror("fcntl get");
  11.                 exit(0);
  12.         }

  13.         flags |= O_NONBLOCK;

  14.         if( fcntl(fileno(stdin), F_SETFL, flags) < 0 ){
  15.                 perror("fcntl set");
  16.                 exit(0);
  17.         }

  18.         while(1){
  19.                 a = fgetc(stdin);
  20.                 fprintf(stderr, "input is: %c\n", a);
  21.                 sleep(1);
  22.         }
  23. }
复制代码

不再阻塞于fgetc了, 呵呵

[ 本帖最后由 zy116 于 2005-11-18 17:25 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2005-11-18 17:58 |只看该作者
谢谢了 太谢谢

fcntl学的不好导致浪费很多时间
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP