linux下more.c编写

        此仅为个人学习总结,没有其他意图,如有不当之处,还请指出,谢谢。

首先将经典的 more.c 抄写下来,然后再作个人的相关分析。

 

 

 

#include<stdio.h>

#include<stdlib.h>

#define PAGELEN 24

#define LINELEN 512

void do_more(FILE *)

int  see_more(FILE *)

 

int main(int ac,char *av[])

{

   FILE *fp;

     if(ac==1)

        do_more(stdin);

      else

          while(--ac)

              if((fp=fopen("++av","r")) != NULL)

        {

           do_more(fp);

                      fclose(fp);

                  }

                else

                    exit(1);

     return 0;

 

void do_more(FILE *fp)

 {

    char line[LINELEN];

    int num_of_lines=0;

    int see_more(FILE *),reply;

    FILE *fp_tty;

    fp_tty = fopen("/dev/tty","r");

    if(fp_tty == NULL)

       exit(1);

    while(fgets(line,LINELEN,fp)){

          if(num_of_lines==PAGELEN){

             reply = see_more(fp_tty);

               if(reply==0)

                  break;

             num_of_lines - =reply;

      }

    if(fputs(line,stdout)==EOF)

       exit(1);

     num_of_lines++;

    }

  }

 

int see_more(FILE *cmd)

 {

   int c;

   printf("/033[7m more?/033[m");

   while((c=getc(cmd)) != EOF)

      {

     if(c=='q')

          return 0;

         if(c==' ')

          return PAGEKEN;

         if(c=='/n')

           return 1;

      }

  return 0;

}

 

    首先,more.c程序能做什么呢?它能显示一个文件的内容,也就是说,它会将你的想看的文件内容显示在屏幕上。那么,我们怎么来显示呢?

    第一次会显示屏幕能容纳的部分内容,然后,根据你的要求做出相应的反应,你有三种选择:1.在显示一屏幕。2.在显示一行。3.退出。当所有的内容都显示完了后也退出。

    现在,我们可以设计它的流程了。

    1.显示一屏幕的内容

    2.问,  空格  or  回车  or    q 。

    3.如果,空格,则在显示一屏幕。

    4.如果,回车,则在显示一行。

    5.如果,q ,则退出。

 

 

 

此程序当执行  ls /bin | ./more时会出现bug

 

 

   修改 see_more() 成see_more(FILE *)

   FILE * cmd = fopen(“/dev/tty”,"r") 相当于从终端读取。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值