如何编写Linux下的cat命令?
2013-11-06 11:58
381 查看
熟悉linux的童鞋应该都知道cat命令,今天本文就带大家来自己实现linux下的这个命令^_^
预备知识:C语言文件处理的一些知识。
关于文件访问,问题在于,如何设计命名文件的读取过程呢?换句话说,如何将用户需要使用的文件的外部名称同读取数据的语句关联起来。
方法其实很简单。在读写一个文件之前,必须通过库函数fopen打开该文件。fopen用类似于x.c或x.txt这样的外部名与操作系统进行某些必要的连接和通信(我们不必关心这些细节),并返回一个随后可以用于文件读写操作的指针。
该指针称为文件指针,它指向一个包含文件信息的结构(体),这些信息包括:缓冲区的位置、缓冲区中当前字符的位置、文件的读或写状态、是否出错或是否已经到达文件结尾等等。用户不必关心这些细节,因为在<stdio.h>中已经定义了一个包含这些信息的结构FILE。在程序中只需要按照下列方式声明一个文件指针即可:
在本例中,fp是一个指向结构FILE的指针,并且fopen函数返回一个指向结构FILE的指针。
在程序中,可以这样调用fopen函数:
第一个参数是文件名,第二个参数是访问模式。允许的访问模式有:读("r")、写("w")及追加("a")。
关于文件大致就简单这样介绍下,更多详细内容请参考相关书籍^_^。
下面的程序主要实现cat命令的查看文件内容的功能:
程序运行结果示例:
另外如果命令输入是“cat 文件名1 文件名2”时,希望程序的功能是将文件1中内容追加到文件2中的话,将上面程序注释部分取消就可以实现该功能,其他查看功能不变。
更多cat命令信息参看:linux下cat命令详解
经我测试,上面的程序能实现
cat命令的三大功能:
1.一次显示整个文件。$ cat filename
2.从键盘创建一个文件。$ cat > filename (将标准输入的内容写到filename中)
3.将几个文件合并为一个文件: $cat file1 file2 > file
测试图片:
预备知识:C语言文件处理的一些知识。
关于文件访问,问题在于,如何设计命名文件的读取过程呢?换句话说,如何将用户需要使用的文件的外部名称同读取数据的语句关联起来。
方法其实很简单。在读写一个文件之前,必须通过库函数fopen打开该文件。fopen用类似于x.c或x.txt这样的外部名与操作系统进行某些必要的连接和通信(我们不必关心这些细节),并返回一个随后可以用于文件读写操作的指针。
该指针称为文件指针,它指向一个包含文件信息的结构(体),这些信息包括:缓冲区的位置、缓冲区中当前字符的位置、文件的读或写状态、是否出错或是否已经到达文件结尾等等。用户不必关心这些细节,因为在<stdio.h>中已经定义了一个包含这些信息的结构FILE。在程序中只需要按照下列方式声明一个文件指针即可:
FILE *fp; FILE *fopen(char *name, char *mode);
在本例中,fp是一个指向结构FILE的指针,并且fopen函数返回一个指向结构FILE的指针。
在程序中,可以这样调用fopen函数:
fp = fopen(name, mode);
第一个参数是文件名,第二个参数是访问模式。允许的访问模式有:读("r")、写("w")及追加("a")。
关于文件大致就简单这样介绍下,更多详细内容请参考相关书籍^_^。
下面的程序主要实现cat命令的查看文件内容的功能:
#include <stdio.h> void filecopy(FILE *, FILE *); int main(int argc, char * argv[]) { FILE *ifp; FILE *ofp; if(argc == 1) filecopy(stdin, stdout); /*else if(argc == 3) { if(((ifp = fopen(argv[1], "r")) != NULL) && ((ofp = fopen(argv[2], "a")) != NULL)) { filecopy(ifp, ofp); fclose(ifp); fclose(ofp); } else { printf("ERROR: can't open file"); exit(1); } } */else { while(--argc > 0) if((ifp = fopen(*++argv, "r")) == NULL) { printf("cat: can,t open %s\n", *argv); exit(1); } else { filecopy(ifp, stdout); fclose(ifp); } } return 0; } void filecopy(FILE * ifp, FILE * ofp) { int c; while((c = getc(ifp)) != EOF) putc(c, ofp); }
程序运行结果示例:
另外如果命令输入是“cat 文件名1 文件名2”时,希望程序的功能是将文件1中内容追加到文件2中的话,将上面程序注释部分取消就可以实现该功能,其他查看功能不变。
更多cat命令信息参看:linux下cat命令详解
经我测试,上面的程序能实现
cat命令的三大功能:
1.一次显示整个文件。$ cat filename
2.从键盘创建一个文件。$ cat > filename (将标准输入的内容写到filename中)
3.将几个文件合并为一个文件: $cat file1 file2 > file
测试图片:
相关文章推荐
- linux下的shell命令的编写,以及java如何调用linux的shell命令(java如何获取linux上的网卡的ip信息)
- linux用cat命令进入一个很大的文件,如何退出?
- (linux)使用cat命令时如何退出
- 【Unix/Linux编程实践】shell如何运行程序—编写命令解析器sh
- 教你如何编写Linux启动或重启时的执行命令/脚本
- 在linux下使用cat命令时如何退出
- linux下的shell命令的编写,以及java如何调用linux的shell命令(java如何获取linux上的网卡的ip信息)
- Linux下cat命令有哪些用途如何使用?
- 如何编写一个完整的Linux命令
- 如何编写一个完整的Linux命令
- 如何在 Linux 上运行命令前临时清空 Bash 环境变量
- Linux命令-cat
- linux 下如何通过ssh到其他机器然后执行命令?
- Linux中cat命令的用法
- linux常用命令-查看文本/cat,tac,more,less,head,tail
- Linux如何查看进程、杀死进程、启动进程等常用命令
- linux cat命令结合head、tail命令只显示文件的部分内容
- Linux如何查看进程、杀死进程、启动进程等常用命令
- linux下cat命令详解
- Linux中如何让命令在后台运行