- 论坛徽章:
- 0
|
如题,从"C专家编程"这本书上面摘下来的一个程序,功能是从读取键盘输入,每次按键都能得到字符,不用输入回车,不阻塞:
- #include<stdio.h>
- #include<stdlib.h>
- #include<sys/ioctl.h>
- #include<errno.h>
- int kbhit(){
- int i;
- if(ioctl(0,FIONREAD,&i)<0){
- printf("ioctl failed, error=%d\n ",errno);
- exit(1);
- }
- return i;
- }
- main(){
- int i=0;
- int c=' ';
- system("stty raw -echo" );
- printf("enter 'q' to quit \n" );
- for(;c!='q';++i){
- if(kbhit()){
- c=getchar();
- printf("\n got %c, on iteration %d",c,i);
- }
- }
- system("stty cooked echo" );
- return 0;
- }
复制代码
---------------------------------
但是我运行这个程序确是100%cpu的死循环,不停的打印。
请问: ioctl函数的参数FIONREAD是什么意思,会导致什么特性?
如果我把 printf("\n got %c, on iteration %d",c,i);
这句话移到if的外面,就导致printf不停的打印,这又是为什么?
谢谢!
[ 本帖最后由 jeanlove 于 2008-11-1 22:17 编辑 ] |
|