Linux C编程——more命令的实现

来源:互联网 发布:顶级域名服务器 权威 编辑:程序博客网 时间:2024/06/02 11:13

#include <stdio.h>#include <stdlib.h>#include <string.h>#define PAGELEN 24#define LINELEN 512void 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("\033[7m more? \033[m");    while ((c = getc(cmd)) != EOF)    {        if (c == 'q')            return 0;        if (c == ' ')            return PAGELEN;        if (c == '\n')            return 1;    }    return 0;}





0 0
原创粉丝点击