当前位置: 技术问答>linux和unix
我要实现这样一个程序,请问?
来源: 互联网 发布时间:2014-10-22
本文导语: 我按一个键,就可以知道按的什么键,不用等按回车了才可以读值,可以吗? 可以用那些方法实现?请大家说说,谢谢! |用ioctl可以设置终端,最好设置成原始模式(raw),所有的输入有你处理 这里有个...
我按一个键,就可以知道按的什么键,不用等按回车了才可以读值,可以吗?
可以用那些方法实现?请大家说说,谢谢!
可以用那些方法实现?请大家说说,谢谢!
|
用ioctl可以设置终端,最好设置成原始模式(raw),所有的输入有你处理 这里有个本人写的类似unix里面more功能的示例 //Gnu Copyright hushui Feb 27th,2001 // use ioctl() // signal // demo Unix "more" programe // #include "stdio.h" #include "fcntl.h" #include "termio.h" #include "signal.h" #include #include "unistd.h" #define BUFSIZE 80 /* when more ,terminate is */ #define SCRN 25 /* 80*25 mode */ struct termio tty,savetty; //savetty : terminate attributes before run more //tty : terminate attributes when run more struct stat sb,*sbp; //fd of file ,argument of more programe off_t fsize; void signal_handle(int intSigNum) //handle signal SIGINT and SIGQUIT // handle these so restore the terminate { printf("n"); ioctl(0,TCSETAF,&savetty); exit(5); } void nextone(int argc,char *fname) //fname : file name { FILE *fp; int line; off_t cnt=0; char linebuf[BUFSIZE]; sbp=&sb; if((fp=fopen(fname,"r"))==NULL) { fputs("file open error",stderr); ioctl(0,TCSETAF,&savetty); exit(3); } else { if(stat(fname,&sb)==-1) //get file attribute { perror("stat"); exit(6); } fsize=sbp->st_size; //get file size } while(1) { system("clear"); for(line=1;line0) //next file {printf(" --------end of %s----n",fname); printf("-----next file -----n"); getchar(); putchar('n'); } return ; /* restart function to put next file */ } cnt=cnt+strlen(linebuf); //bytes that have been read fputs(linebuf,stdout); } /* end for */ printf("===========more========="); /* a full screen */ printf("%ld %",100*cnt/fsize); printf("%"); getchar(); putchar('n'); } /* end of while ,one full screen */ } int main(int argc,char ** argv) { if(argc