设为首页 加入收藏

TOP

如何编写Linux下的cat命令?
2015-02-02 14:21:50 来源: 作者: 【 】 浏览:6
Tags:如何 编写 Linux cat 命令

熟悉Linux的童鞋应该都知道cat命令,今天本文就带大家来自己实现Linux下的这个命令^_^


预备知识:C语言文件处理的一些知识。


关于文件访问,问题在于,如何设计命名文件的读取过程呢?换句话说,如何将用户需要使用的文件的外部名称同读取数据的语句关联起来。


方法其实很简单。在读写一个文件之前,必须通过库函数fopen打开该文件。fopen用类似于x.c或x.txt这样的外部名与操作系统进行某些必要的连接和通信(我们不必关心这些细节),并返回一个随后可以用于文件读写操作的指针。


该指针称为文件指针,它指向一个包含文件信息的结构(体),这些信息包括:缓冲区的位置、缓冲区中当前字符的位置、文件的读或写状态、是否出错或是否已经到达文件结尾等等。用户不必关心这些细节,因为在中已经定义了一个包含这些信息的结构FILE。在程序中只需要按照下列方式声明一个文件指针即可:


FILE? *fp;
FILE? *fopen(char? *name,? char? *mode);


在本例中,fp是一个指向结构FILE的指针,并且fopen函数返回一个指向结构FILE的指针。


在程序中,可以这样调用fopen函数:


fp = fopen(name, mode);


第一个参数是文件名,第二个参数是访问模式。允许的访问模式有:读("r")、写("w")及追加("a")。


关于文件大致就简单这样介绍下,更多详细内容请参考相关书籍^_^。


下面的程序主要实现cat命令的查看文件内容的功能:


#include


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);
}


程序运行结果示例:


如何编写Linux下的cat命令?


另外如果命令输入是“cat 文件名1? 文件名2”时,希望程序的功能是将文件1中内容追加到文件2中的话,将上面程序注释部分取消就可以实现该功能,其他查看功能不变。


经我测试,上面的程序能实现


cat命令的三大功能:


1.一次显示整个文件。$ cat filename


2.从键盘创建一个文件。$ cat > filename? (将标准输入的内容写到filename中)


3.将几个文件合并为一个文件: $cat file1 file2 > file


测试图片:


如何编写Linux下的cat命令?


如何编写Linux下的cat命令?


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Delphi中写日志文件log总结 下一篇Java AES算法和UNIX下OpenSSL之间..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: