C语言实现Linux中的cat命令(命令行输入)

1.模仿Linux系统中cat 命令的显示功能。

 程序在命令行中执行时,带一个文件名作为参数。程序将指定的文件内容在屏幕上显示出来。

#include 
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
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。 

 

 

你可能感兴趣的:(C语言实现Linux中的cat命令(命令行输入))