您的位置:首页 > 运维架构 > Linux

Linux---More命令 初级实现

2013-10-09 21:05 330 查看
Linux: more
已实现:more filename , quit不需要回车
未实现:command | more 重定向 ,显示百分比
Waiting。。。

/*
Linux: more
已实现:more filename , quit不需要回车
未实现:command | more 重定向 ,显示百分比
Waiting。。。
*/
#include<stdio.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 );
else{
while( --ac )
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 see_more(),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;
system ("stty -F /dev/tty cbreak");/*打开/dev/tty作为输入终端,并且控制属性为不需要回车*/
printf("\033[7m more?\033[m");
while( (c=getchar())!=EOF ){
if( c=='q' ){
return 0;
}
if( c==' ' ){
return PAGELEN;
}
if( c=='\n' ){
return 1;
}
}
system ("stty -F /dev/tty -cbreak");/*恢复终端属性为需要回车*/
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: