Unix/Linux编程实践教程【高清PDF中文版+附录光盘+代码】下载地址: http://www.linuxidc.com/Linux/2011-08/41374.htm章节:1.6页数:17原程序:more01.c
- #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); //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(" 33[7m more?