美文网首页
more命令的基本实现

more命令的基本实现

作者: 人海茫茫Al | 来源:发表于2018-05-29 19:07 被阅读0次
    #include <stdio.h>
    #include <stdlib.h>
    #define PAGELEN 24
    #define LINELEN 512
    
    void do_more(FILE*);
    int see_more();
    
    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(), 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) exit(1);
            num_of_lines++;
        }
    }
    
    int see_more() {
        int c;
        printf("\033[7m more?\033[m");
        while ((c=getchar()) != EOF) {
            if (c == 'q') return 0;
            if (c == ' ') return PAGELEN;
            if (c == '\n') return 1;
        }
        return 0;
    }
    

    分析上述代码的不足:
    从上述代码可以知道,若没有命令行参数,则会从标准输入读取数据。


    图-1.1 image.png

    相关文章

      网友评论

          本文标题:more命令的基本实现

          本文链接:https://www.haomeiwen.com/subject/kdnajftx.html