怎么在while 中不阻塞获取键盘输入?

zx9786 2013-12-10 09:47:33
while(1)
{
scanf("%s",szInput);
if(strcmp("exit",szInput)==0)
{
break;
}
。。。。。
}

如上,结果导致while中下面的语句不执行,阻塞在scanf中,怎么实现又能读取键盘输入,又能让while运转不阻塞?
...全文
673 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Pump天天学习 2013-12-12
  • 打赏
  • 举报
回复
引用 1 楼 qq120848369 的回复:
select即可。
版主大神,select不也是要阻塞等到其可读才返回吗?
missheaven2011 2013-12-12
  • 打赏
  • 举报
回复
引用 7 楼 a345485527 的回复:
[quote=引用 1 楼 qq120848369 的回复:] select即可。
版主大神,select不也是要阻塞等到其可读才返回吗?[/quote] 可以把描述符设置成不堵塞的啊
beginning1126 2013-12-12
  • 打赏
  • 举报
回复
fcntl将标准输入0设置为非堵塞的
abc19899 2013-12-11
  • 打赏
  • 举报
回复
刚才按错键,直接提交了囧 while(1) { while(!sigkill) { // ... } sigkill = false; scanf("%s",szInput); ... } 然后做个信号捕获,收到Ctrl_C信号,把sigkill 设为true
abc19899 2013-12-11
  • 打赏
  • 举报
回复
或者你学习下gdb的做法,
heartlesstoanyone 2013-12-10
  • 打赏
  • 举报
回复
另启一线程,并发跑,两个线程间同步下数据。
zx9786 2013-12-10
  • 打赏
  • 举报
回复
刚学里linux,不是很懂阿,望写两句代码
qq120848369 2013-12-10
  • 打赏
  • 举报
回复
引用 1 楼 qq120848369 的回复:
select即可。
或者你压根就打算空转,那么设置非阻塞,死循环不停的去尝试读就可以了。
qq120848369 2013-12-10
  • 打赏
  • 举报
回复
select即可。

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧