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") 相當於從終端讀取。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章