免费注册 查看新帖 |

Chinaunix

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

linux下more命令的编写,按下q键,空格,回车键都没反应,请教怎么回事,望大侠指教! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-11 14:00 |只看该作者 |倒序浏览
  1. #include<stdio.h>
  2. #define PAGELEN 24
  3. #define LINELEN 512

  4. int do_more(FILE *fp){                //获取按键
  5.         int c;
  6.         printf("\033[7m more? \033[m");
  7.         while((c=getc(fp))!=EOF){       
  8. if(c==' '){
  9.                                return PAGELEN;
  10.         }
  11.                 if(c=='\n'){
  12.                        
  13.                         return 1;
  14.                         }
  15.                 if(c=='q'){
  16.                         return 0;
  17.                 }
  18.                        
  19.                 }
  20.         return 0;
  21. }

  22. void see_more(FILE *fp){      //按q退出,空格显示下一页,回车显示下一行。
  23.         int line_num=0;
  24.         int reply;
  25.         char linech[LINELEN];
  26.         FILE *fp_tty;
  27.         fp_tty=fopen("/dev/tty","r");   //打开/dev/tty文件(在这相当于键盘)
  28.         if(fp_tty==NULL){  
  29.                         exit (1);
  30.                 }
  31.         while(fgets(linech,LINELEN,fp)){
  32.                 if(fputs(linech,stdout)==EOF){
  33.                                 exit(1);
  34.                         }
  35.                 line_num++;
  36.                 if(line_num==PAGELEN){
  37.                         reply=do_more(fp_tty);
  38.                         if(reply==0){
  39.                                 break;
  40.                         }
  41.                         line_num-=reply;
  42.                 }
  43.                

  44. }

  45. }
  46. int main(int ac,char *av[]){
  47.         FILE *fp;
  48.         if(ac==1)
  49.                 see_more(stdin);
  50.         else
  51.             {
  52.                 while(--ac)
  53.                    if((fp=fopen(*++av,"r"))!=NULL){   
  54.                         see_more(fp);
  55.                         fclose(fp);
  56.                         }else
  57.                            exit(1);
  58.         }
  59.         return 0;
  60.         }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP