more指令的实现及文件操作函数

来源:互联网 发布:urllib json 编辑:程序博客网 时间:2024/06/05 02:44
Unix中的more指令是用作分页显示大量信息,并能够进一步接收用户的指令来进行后续显示的命令。使用其可以直接more也可以用管道重定向。可接收的指令有q(退出),空格(新一页)及回车(新一行)。同时还有阅读百分比等信息。
以下用c将其简单实现:

在其中使用了文件读取函数fgetc,fputc等,此类函数通过文件指针直接对文件的内容进行读写,感觉挺有用的,简单介绍一下。
char fgetc(FILE *fp) 
是从文件指针当前位置读取一字符,成功则返回字符,同时指针后移一位,结束时返回EOF,值为-1。(疑惑:系统如何判定是第一次操作文件的?初始化时直接将指针指向文件开始位置么?对文件进行fgetc或fgets操作后,如果将此指针用于其他函数是否会出错?)
char fputc(char ch, FILE *fp)
将ch字符输出到文件当前位置,成功则返回ch,同时指针后移1位,结束返回EOF。
char *fgets(char*str, int n, FILE*fp)
从fp所指文件当前位置读入最多n-1个字符,最后自动加上'\0'以结束字符串存储进str数组中,若在此过程中遇到换行或者结束符时则提前结束读取过程。
Notice:此类文件操作函数属于缓冲处理函数,将ch或str写入文件指针fp的过程实际上只是写入了缓冲区(需考证),待程序正常结束后写入文件中,若程序未正常结束,则ch或str并不会写入到文件中。
程序中还用到文件的操作函数fopen,fclose等。此函数与系统调用函数open,close函数不同,通过文件指针FILE *对文件操作,而不是文件套接字,此中区别及优劣可以另外讨论,此处记录下我之前的疑问点,主要是指针方面。
函数FILE *fopen(const char *path, const char*mode),程序中用到了fp=fopen(*++argv, "r")的表示方法。argv[]是包含命令中参数的数组,因此argv实际上是一个二级指针,其内数组的每格存放一个指向变量的指针。因此在使用fopen时。fp=fopen(argv[x],"r")或fp=fopen(*++argv,"r"),用argv自加的形式可减少一层循环嵌套。
0 0
原创粉丝点击