C语言实现Linux的more指令(version_2)


/*this is version_2*/


#include <stdio.h>

#define PAGELEN 24
#define LINELEN 80

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(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 *fp_tty)
{
int c;

printf("\t[more ?]:");

while((c = getc(fp_tty)) != EOF)
{
if(c == 'q')
return 0;
if(c == ' ')
return PAGELEN;
if(c == '\n')
return 1;
}
}

posted @ 2013-03-17 23:09  Auris  阅读(280)  评论(0编辑  收藏  举报