|
#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("\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;
} |
|