读书人

求解答: 《Unix/Linux 编程实践教程》

发布时间: 2012-10-21 09:00:07 作者: rapoo

求解答: 《Unix/Linux 编程实践教程》中 more命令实现代码的理解问题

C/C++ code
#include <stdio.h>#define PAGELEN 24#define LINELEN 512void do_more(FILE *);int see_more();int main(int argc, char *argv[]){    FILE *fp;    if(argc == 1)                 //不带参数运行,从标准输入读,即键盘        do_more(stdin);    else{                                        while(-- argc)   //问题:对于这个“ more < log.txt  ”怎么理解?                      if((fp = fopen(* ++argv,"r")) != NULL){ //打开命令行参数所指定的文件            do_more(fp);            fclose(fp);        }        else            exit(1);    return 0;            }}void do_more(FILE *fp){    char line[LINELEN];      //缓冲区 每次从文件读LINELEN个字符            int num_of_lines = 0;    int reply;    while(fgets(line, LINELEN, fp)){      //从文件中读取一行放入缓冲区        if(num_of_lines == PAGELEN){            reply = see_more();            if(reply == 0)                break;            num_of_lines -= reply;            }                if(fputs(line, stdout) == EOF){ //将缓冲区中的内容写入到stdin(标准输入),也就是显示器终端            exit(1);        }        num_of_lines++;    }    }int see_more(){    int c;    printf("\033[7m more? \033[m");     //在屏幕底部显示反白的“more?”     while( (c = getchar())!= EOF ){     //接受键盘输入        if( c == 'q')                        //按q键退出程序            return 0;        if( c == ' ')                        //按空格显示下一屏            return PAGELEN;        if( c == '\n')                        //按回车显示下一行            return 1;            return 0;                }}    


[解决办法]
有可能传递n个文件啊,这样argc就等于n+1,然后每递减一次都进行do_more的动作,相当于依次查看这n个文件。

读书人网 >C语言

热点推荐