linux more 命令的基础实现。
more :分页显示文件的内容
输入 more filename
会显示文件第一屏的内容,而且会有反白的 more 提升文件的百分比。空格=下一页,q=推出,h=连接帮助
more 的用法
1. more filename 如 :more filename.c
2. comand | more 如:ls -al / | more
3.more < filename 如:more < 1.txt
/* moreo1.c version 0.1 of more
* read and print 24 line then pause for a few special commands
*/
#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;
printf("\033[7m more?\033[m");
while( (c=getchar()) != EOF)
{
if(c == 'q')
return 0;
if(c == ' ')
return PAGELEN;
if(c == '\n')
return 1;
}
return 0;
}
////改进的more命令
/* moreo2.c version 0.1 of more
* read and print 24 line then pause for a few special commands
*/
#include <stdio.h>
#include <stdlib.h>
#define PAGELEN 24
#define LINELEN 512
void do_more(FILE *);
int see_more(FILE *);
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(FILE *),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;
}
linux more 命令的基础实现。的更多相关文章
- Linux常用命令总结--基础命令
系统信息 1.arch 显示机器的处理器架构(1) 2.uname -m 显示机器的处理器架构(2) 3.lsb_release -a 查看操作系统版本 4.top 查看进程 5.free -m 查看 ...
- Linux的命令行基础
1.对于全局配置文件和用户配置文件的认识 全局配置都存储在etc目录下,如/etc/profile文件,/etc/bashrc文件以及/etc/profile.d/目录下的.sh文件 用户配置都存储在 ...
- Linux常用命令整理 - imsoft.cnblogs
su 用户名 在不退出登陆的情况下,切换到另外一个人的身份如果用户名缺省,则切换到root状态会提示输入密码,密码不回显的. 在用su命令切换root用户时,使用“-”选项,这样可以将root的环境变 ...
- 你必须了解的基础的 Linux 网络命令
Linux 基础网络命令列表 我在计算机网络课程上使用 FreeBSD,不过这些 UNIX 命令应该也能在 Linux 上同样工作. 连通性 ping <host>:发送 ICMP ech ...
- Linux命令工具基础04 磁盘管理
Linux命令工具基础04 磁盘管理 日程磁盘管理中,我们最常用的有查看当前磁盘使用情况,查看当前目录所占大小,以及打包压缩与解压缩: 查看磁盘空间 查看磁盘空间利用大小 df -h -h: huma ...
- 基础的 Linux 网络命令,你值得拥有
导读 有抱负的 Linux 系统管理员和 Linux 狂热者必须知道的.最重要的.而且基础的 Linux 网络命令合集.在 It's FOSS 我们并非每天都谈论 Linux 的"命令行方面 ...
- Linux学习之CentOS(二)--初识linux的一些常用命令(基础命令)
初次学习linux系统,首先也得会一些linux的基本命令.至少要先学会开启和关闭系统吧!我称为 基础命令! linux命令是对Linux系统进行管理的命令.对于Linux系统来说,无论是中央处理器. ...
- 罗列Linux发行版的基础目录名称,命令法则和功能
罗列Linux发行版的基础目录名称命名法则及功用规定 目录描述 /主层次 的根,也是整个文件系统层次结构的根目录 /bin存放在单用户模式可用的必要命令二进制文件,所有用户都可用,如 cat.ls.c ...
- SLAM+语音机器人DIY系列:(一)Linux基础——3.Linux命令行基础操作
摘要 由于机器人SLAM.自动导航.语音交互这一系列算法都在机器人操作系统ROS中有很好的支持,所以后续的章节中都会使用ROS来组织构建代码:而ROS又是安装在Linux发行版ubuntu系统之上的, ...
随机推荐
- [cf674E]Bear and Destroying Subtrees
令$f_{i,j}$表示以$i$为根的子树中,深度小于等于$j$的概率,那么$ans_{i}=\sum_{j=1}^{dep}(f_{i,j}-f_{i,j-1})j$ 大约来估计一下$f_{i,j} ...
- FastJson测试用例
基础测试 package com.ai; import com.ai.test.daily.Student; import com.alibaba.fastjson.JSON; import com. ...
- 规格模式(Specification Pattern)
本文节选自<设计模式就该这样学> 1 规格模式的定义 规格模式(Specification Pattern)可以认为是组合模式的一种扩展.很多时候程序中的某些条件决定了业务逻辑,这些条件就 ...
- Apache ShardingSphere 5.0.0 内核优化及升级指南
经过近两年时间的优化和打磨,Apache ShardingSphere 5.0.0 GA 版终于在本月正式发布,相比于 4.1.1 GA 版,5.0.0 GA 版在内核层面进行了大量的优化.首先,基于 ...
- java 后台通过IO流把文件传到前端并下载
我的业务需求是两个不同的web程序放在不同的服务器上,web程序A要访问到web程序B上传上来的文件,所以用到了这一个IO读取文件的接口 JAVA代码(排版有点问题 已经尽力补救了(:3_ヽ)_) ...
- 贪心/构造/DP 杂题选做Ⅲ
颓!颓!颓!(bushi 前传: 贪心/构造/DP 杂题选做 贪心/构造/DP 杂题选做Ⅱ 51. CF758E Broken Tree 讲个笑话,这道题是 11.3 模拟赛的 T2,模拟赛里那道题的 ...
- 洛谷 P3246 - [HNOI2016]序列(单调栈+前缀和)
题面传送门 这道题为什么我就没想出来呢/kk 对于每组询问 \([l,r]\),我们首先求出区间 \([l,r]\) 中最小值的位置 \(x\),这个可以用 ST 表实现 \(\mathcal O(n ...
- O(1)判断两点之间是否有边
O(1)判断两点之间是否有边 问题描述 给定一张 \(n\) 个点,\(m\) 条边的有向图. 多次询问,要求每次 \(\mathcal{O}(1)\) 判断两点之间是否有边(你可以忽略输入.输出等问 ...
- dlang ref的作用
ref 作用 1 import std.stdio, std.string; 2 3 void main() 4 { 5 string[] color=["red","b ...
- Linux—su命令和su -命令的差别(切换登录账号)
1.普通用户切换到root用户,命令su或su - 本人以前一直习惯直接使用root,很少使用su,前几天才发现su与su -命令是有着本质区别的! 大部分Linux发行版的默认账户是普通用户,而更改 ...