Linux---More命令 初级实现
2013-10-09 21:05
330 查看
Linux: more
已实现:more filename , quit不需要回车
未实现:command | more 重定向 ,显示百分比
Waiting。。。
View Code
已实现: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
相关文章推荐
- Linux 运行指令和获取指令帮助
- Linux文件系统的进化
- linux 重启及关机命令
- Linux高性能服务器编程(笔记3)
- Linux就是这个范儿之第一次亲密接触(1)
- 给VMware下的Linux扩展磁盘空间(以CentOS6.3为例)
- linux内核奇遇记之md源代码解读之四
- linux系统编程之信号(二):信号处理流程(产生、注册、注销、执行)
- Linux 脚本编写基础
- ipcs的深入分析
- ipcs的使用
- linux内存共享
- Linux下如何查看高CPU占用率线程
- [转]linux下怎么查看ssh的用户登录日志
- linux c关于目录是否存在,新建目录等操作
- 转载_Linux内核OOPS调试
- Linux系统调用和库函数调用的区别
- linux下使用fscanf实现scanf
- Linux 文件系统
- linux 流量监控 ---iptraf的安装及使用