zoukankan      html  css  js  c++  java
  • Linux中more命令的实现

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define PAGELEN 24
    #define LINELEN 512
    
    void do_more(FILE *);
    int see_more(FILE *);
    
    int main(int argc, char *argv[])
    {
        FILE *fp;
        if (argc == 1)
            do_more(stdin);
        else
        {   
            while (--argc)
            {   
                if ((fp = fopen(*++argv, "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 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("33[7m more? 33[m");
        while ((c = getc(cmd)) != EOF)
        {
            if (c == 'q')
                return 0;
            if (c == ' ')
                return PAGELEN;
            if (c == '
    ')
                return 1;
        }
        return 0;
    }
    


    还有许多缺陷

  • 相关阅读:
    Django模板系统
    __new__与__init__的区别
    django中models field详解
    快速入门mysql
    jq2
    jq
    前端 js 部分
    前端 js
    前端 css
    前端 table form
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3148255.html
Copyright © 2011-2022 走看看