C语⾔实现Linux中的cat命令(命令⾏输⼊)
1.模仿Linux系统中cat 命令的显⽰功能。
程序在命令⾏中执⾏时,带⼀个⽂件名作为参数。程序将指定的⽂件内容在屏幕上显⽰出来。
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fp = fopen(argv[1], "r");  // 以只读⽅式打开⽂件,argv[1]是输⼊的要显⽰的⽂件路径名
int read_ret;
if(argc < 2)  //说明没有输⼊要显⽰的⽂件名,只有本程序名argv[0]
{
printf("please input source file!\n");
}
if(fp == NULL)  //如果打开成功的话就把该⽂件的信息结构体地址赋给⽂件指针fp,如果打开不成功的话就将⽂件指针fp置为⽆效(NULL)
{
printf("open source %s failed!\n", argv[1]);
return -1;
}
while(1)  //成功打开
{
linux重定向
read_ret = fgetc(fp);  //单个字符读写
if(feof(fp))  // feof判断⽂件结束,若fp已经指向⽂件末尾,则feof(fp)函数值为“真”,即返回⾮零值
{
printf("read file %s endl\n",argv[1]);  //提⽰读写结束
break;
}
fputc(read_ret,stdout);  //把单个字符输出到屏幕
}
}
当执⾏命令  ./mycat myfile  时,会显⽰⽂件myfile的内容。
2.模仿Linux系统中cat 命令的合并输出功能。
结合shell所提供的输出重定向功能,可以⽤来合并两个⽂件。例如,执⾏命令cat one two > joined 就可以得到新⽂件joined,其内容等同于⽂件one和two前后连在⼀起。
#include<stdio.h>
int main(int argc, char *argv[])
{
FILE *fp1 = fopen(argv[1], "r");  //以只读⽅式打开⽂件1
FILE *fp2 = fopen(argv[2], "r");  //以只读⽅式打开⽂件2
FILE *fp3 = fopen(argv[3], "w");  //以只写⽅式打开⽂件3,⽂件不存在则⾃动建⽴
int read_ret;
if(argc < 4) //需输⼊两个需要合并的⽂件名和⼀个合并后的⽂件名
{
printf("please input 3 file!\n");
}
if(fp1 == NULL)  //⽂件1打开不成功
{
printf("open source %s failed!\n", argv[1]);
return -1;
}
while(1)  //成功打开1
{
read_ret = fgetc(fp1);  //单个字符读写
if(feof(fp1))  //fp1已经指向⽂件末尾,结束循环
{
break;
}
fputc(read_ret,fp3);  //把单个字符输出到⽂件3
}
fopen(argv[3], "a");  //以附加⽅式打开⽂件3
if(fp2 == NULL)  //⽂件2打开不成功
{
printf("open source %s failed!\n", argv[2]);
return -1;
}
while(1)  //成功打开2
{
read_ret = fgetc(fp2);  //单个字符读写
if(feof(fp2))
{
break;
}
fputc(read_ret,fp3);  //把单个字符输出到⽂件3
}
fclose(fp1);
fclose(fp2);
fclose(fp3);  //关闭⽂件
return 0;
}
当执⾏命令 ./merge one two joined 就可以根据已有的⽂件one、two获得合并后的新的⽂件joined。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。