Linux_自己写一个more命令

本文详细介绍了如何实现Linux的more命令,从分析more的功能到动手编写,涵盖了文件的打开、按行读取、显示文件百分比以及处理用户输入等方面。通过fopen、fgets、fputs等函数实现文件操作,利用tcgetattr和tcsetattr改变终端输入属性,以达到类似more命令的效果。
摘要由CSDN通过智能技术生成

1 分析
1.1 linux的more命令可以做什么?
more命令可以分页显示文本的内容,首先显示出第一页的内容,然后按回车显示下一行,按空格显示下一页,按q退出,按h显示帮助。同时,在显示的最下方显示文件的百分比
1.2 more是如何实现的
由more的功能可知,首先先输出一页,然后输出文件百分比,等待用户的输入,根据用户的输入进行下一步操作。
2 自己动手写一个more命令
2.1 实现打开文件
2.1.1 通过使用fopen函数来打开一个文件

#include <stdio.h>
 FILE *fopen(const char *path, const char *mode);

fopen是ANSIC标准中的C语言库函数,返回一个文件指针。
参数:
①path 文件的地址
② mode 文件打开的方式,共有一下几种

 - r  以只读的方式打开文件,文件的读写位置为文件的开头
 - r+ 以读写的方式打开文件,文件的读写位置为文件的开头
 - w 以只写的方式打开文件并清除文件的内容,文件的读写位置为文件的开头
 - w+ 以读写的方式打开文件,若文件存在就清除文件内容,若不存在及新建一个文件
 - a 以追加的方式打开文件,若文件不存在就新建一个文件,文件的读写位置在文件的末尾
 - a+ 以追加和读取的方式打开文件,读取的位置在文件的开头,写的位置仍然在文件的末尾

2.1.2 fopen与open的区别
这里写图片描述

2.1.3 缓冲文件系统与非缓冲文件系统的区别
缓冲文件系统
缓冲文件系统是借助于文件结构体指针FILE *来对文件进行管理,通过文件指针对文件进行访问,即可以读写字符、字符串、格式化数据,也可以读写二进制数据。
缓 冲文件系统特点:在内存中开辟一个“缓冲区”,为程序里每一个文件使用,当执行读文件操作时,从磁盘文件将数据先读入内存“缓冲区”,装满后再从内存“缓 冲区”依次读入接收的变量。执行写文件操作时,也是先将数据写入内存“缓冲区”,待内存“缓冲区”装满后再写入文件。由此可以看出,内存“缓冲区”的大 小,影响着实际操作外在的次数,内存“缓冲区”越大,则操作外存的次数就越少,执行速度就越快,效率就越高。一般来说,文件“缓冲区”的大小跟机器是相关 的。
缓冲文件系统的IO函数主要包括:fopen, fclose, fread, fwrite, fgetc, fgets, fputc, fputs, freopen, fseek, ftell, rewind等。
非缓冲文件系统
非缓冲文件系统依赖于操作系统,通过操作系统的功能对文件进行读写,是系统级的输入输出,它不设文件结构体指针,只能读写二进制文件(对于UNIX系统内核而言,文本文件和二进制代码文件并无区别),但效率高、速度快,由于ANSI标准不再包括非缓冲文件系统,因此,在读取正规的文件时,建议大家最好不要选择它。
非缓冲文件系统的IO函数主要包括:open, close, read, write, getc, getchar, putc, putchar等。

2.2 实现按行读取文件并显示
2.2.1 用fgets来读取文件中的一行

#include <stdio.h>
char *fgets(char *s, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值