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,