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) //成功打开
{
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。