博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux中more命令的实现
阅读量:5162 次
发布时间:2019-06-13

本文共 1302 字,大约阅读时间需要 4 分钟。

#include 
#include
#include
#define PAGELEN 24#define LINELEN 512void 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(1); } } return 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 *cmd){ int c; 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;}

还有许多缺陷

转载于:https://www.cnblogs.com/snake-hand/p/3148255.html

你可能感兴趣的文章
WebService 布置简单的计算器
查看>>
20160616 html5练习代码一
查看>>
POJ 2451-半平面交
查看>>
开发 Windows 8 Bing地图应用(2)
查看>>
非常简单的部署脚本(JavaWeb项目)和部署项目教程
查看>>
Ibatis中传List参数
查看>>
springMVC配置文件路径问题
查看>>
--print-defaults打印mysqld启动加载配置
查看>>
Android实战简易教程-第二十三枪(基于Baas的用户注冊验证username是否反复功能!)...
查看>>
php 压缩函数gzencode gzdeflate gzcompress
查看>>
二维动态数组定义及二维静态数组与**P的区别
查看>>
《七年失败的程序之路》读后感
查看>>
luogu P2507 [SCOI2008]配对
查看>>
JQuery-EasyUI与EXTjs有什么区别?
查看>>
java多线程编程
查看>>
【推荐系统篇】--推荐系统之之特征工程部分---构建训练集流程
查看>>
查看Java JVM参数配置信息命令
查看>>
04 构建之法阅读笔记
查看>>
[Leetcode 62] 74 Search a 2D Matrix
查看>>
hdu 3183 A Magic Lamp 【RMQ】
查看>>