unix环境编程之more编写

来源:互联网 发布:手机上音乐截取软件 编辑:程序博客网 时间:2024/06/05 17:59

more命令介绍:

more能分页显示文件的内容。more会显示第一屏文件的内容,在屏幕的底部more用反白字体显示文件的百分比,这时如果按空格,文件下一屏的内容会显示出来,如果按回车,则显示的是下一行,如果输入q则结束(无需再按空格),输入help,显示more的联机帮助。

PS:

fgets是会自动后移的。如果使用fgets()读取某个文件,第一次读取的bufsize为5,而文件的第一行有10个字符(算上'\n'),那么读取文件的指针会偏移至当前读取完的这个字符之后的位置。也就是第二次再用fgets()读取文件的时候,则会继续读取其后的字符。

这只是一个简单的版本,与实际中的more相比还有很多需要改进的地方

#include<stdio.h>#define CHARLINE 512#define PAGELEN24void do_more(FILE *);int se_more(FILE *);void main(int argc,char *argv[]){if(argc==1){do_more(stdin);}elseif(fp=fopen(argv[1],'r')!=NULL){do_more(fp);fclose(fp);}elseexit(1);}void do_more(FILE *fp){int line[CHARLINE];int lines_num=0;int see_more(FILE *),replay;FILE *fd_tty;fd_tty=fopen("/dev/tty","r");if(fd_tty==NULL){printf("error:not found tty");}while(fgets(line,CHARLINE,fp)){if(lines_num==PAGELEN){replay=see_more(fd_tty);if(replay==0)break;}if(fputs(line,stdout)==EOF){printf("error");}lines_num++;}}int see_more(FILE *cmd){char a;printf("\033[7m more? \033[m");while((a=getc(cmd))!=EOF){if(a=='q'){return 0;}if(a==' '){return 1;}if(a=='\n'){return PAGELEN;}}}




0 0
原创粉丝点击