《Unix/Linux编程实践教程》读书笔记

章节:1.6

页数:17

原程序:more01.c

#include <stdio.h>#include <stdlib.h>#define PAGELEN 24#define LINELEN 512void do_more(FILE *);int see_more();int main(int ac, char *av[]){    FILE *fp;    if( ac == 1 )    do_more(stdin);  //stdin 是标准输入,可以是来自键盘的输入,还可以来自被重定向的管道输入    else    while( --ac )  /*若ac=2,则 -1 后,表示第2个参数,一般是要显示的文件名*/        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 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.当以./moreo1无参数运行时,是不会打开输入的文件名的,而只是将输入内容在输出一遍。如下:

为弥补上述,现修改如下:

#include<stdio.h>#include <string.h>#include <errno.h>#define PAGELEN 24#define LINELEN 512void do_more(FILE *);int see_more();int main(int argc,char* argv[]){FILE *fp;char line[LINELEN];if(argc==1){scanf ("%s",line);if((fp = fopen (line,"r"))!=NULL){do_more(fp);close(fp);}else printf(strerror(errno));}else{while(--argc);if((fp=fopen(*++argv,"r+"))!=NULL){do_more(fp);close(fp);}elseexit(1);      }return 0;}void do_more(FILE *fp){char line[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)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==' '){getchar();return PAGELEN;}if(c=='\n')return 1;}return 0;}

自然而然不想去因为别人的努力而努力,

《Unix/Linux编程实践教程》读书笔记

相关文章:

你感兴趣的文章:

标签云: