unix/linux编程实践教程--more命令

来源:互联网 发布:博知教育 编辑:程序博客网 时间:2024/05/17 23:29

1. 简陋版本的more命令

#include <stdio.h>#define PAGELEN 24#define LINELEN 512void do_more( FILE * );int see_more( FILE * );int main( int ac, char **av ){FILE *fp;if ( ac == 1 )do_more( stdin );elsewhile ( --ac )if ( ( fp = fopen( *++av, "r" ) ) != NULL ){do_more( fp );fclose( fp );}else{exit( 1 );}return 0;}void do_more( FILE *fp ){charline[ LINELEN ];intnum_of_lines = 0;intsee_more( FILE * );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 ){intc;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;}

    可通过以下命令执行:

ls /bin | ./a.out


0 0