首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-10-21 
求解答: 《Unix/Linux 编程实践教程》中 more命令实现代码的理解问题C/C++ code#include stdio.h#define P

求解答: 《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个文件。

热点排行