实现Linux CP命令的代码

目标:实现 cp   src.c   des.c 拷贝一个文件的内容到另外一个文件。

一、C语言参数

二、思路:

  1. 打开src.c;
  2. 读src到buf;
  3. 打开/创建des.c;
  4. 将buf写到des.c;
  5. close两个文件;

要用到参数的话,main函数的原型需要写完整: 括号里的是参数,main函数可以接受命令行参数

int main(int argc,char **argv)

        在这段代码中,int main(int argc, char **argv) 意味着 main 函数接受命令行参数,并且使用 argcargv 这两个参数来获取命令行传递的参数信息。

        接受命令行参数意味着程序可以在运行时从命令行中接收输入,并将这些输入用作程序的参数。在C语言中,main 函数可以接受两个参数:argcargv

  • argc(argument count)是一个整数,表示命令行参数的数量,包括程序名本身。
  • argv(argument vector)是一个指向字符串数组的指针,每个字符串都是一个命令行参数

 例如,当你在终端中运行一个可执行文件时,你可以在命令行中传递参数,如下所示:

./a.out arg1 arg2 arg3

在这个例子中,argc 的值是 4,argv 中包含了程序名以及三个参数的字符串数组。

  1. int main(int argc, char **argv): main 函数,接受命令行参数。

  2. int fdSrc;int fdDes;: 声明两个整型变量,分别用于表示源文件和目标文件的文件描述符。

    int fdSrc;
    int fdDes;
  3. char *readBuf = NULL;: 声明一个字符指针 readBuf,用于存储从源文件读取的内容。

    char *readBuf = NULL;
    
  4. if(argc != 3){...}: 检查命令行参数的个数是否为 3,如果不是则输出错误信息并退出程序。

    if(argc != 3){
                    printf("param error\n");
                    exit(-1);
            }
    
  5. fdSrc = open(argv[1], O_RDWR);: 打开第一个命令行参数指定的文件,以读写方式打开。

    fdSrc = open(argv[1], O_RDWR);
  6. int size = lseek(fdSrc, 0, SEEK_END);: 使用 lseek 函数获取源文件的大小,即文件的字节数。

    int size = lseek(fdSrc, 0, SEEK_END);
    
  7. lseek(fdSrc, 0, SEEK_SET);: 将文件指针移动到文件的开头,以便后续读取文件内容。

    lseek(fdSrc, 0, SEEK_SET);
  8. readBuf = (char *)malloc(sizeof(char)*size + 8);: 使用 malloc 函数动态分配内存空间给 readBuf,分配的空间大小为源文件的大小加上 8 个额外的字节。

    readBuf = (char *)malloc(sizeof(char)*size + 8);
  9. int n_read = read(fdSrc, readBuf, size);: 使用 read 函数从源文件中读取内容到 readBuf 中,读取的字节数为文件的大小。

    int n_read = read(fdSrc, readBuf, size);
  10. fdDes = open(argv[2], O_RDWR|O_CREAT|O_TRUNC, 0600);: 打开第二个命令行参数指定的文件,如果文件不存在则创建,如果存在则清空文件内容,并以读写方式打开。

    fdDes = open(argv[2], O_RDWR|O_CREAT|O_TRUNC, 0600);
  11. int n_write = write(fdDes, readBuf, strlen(readBuf));: 使用 write 函数将 readBuf 中的内容写入到目标文件中,写入的字节数为 readBuf 中字符串的长度。

    int n_write = write(fdDes, readBuf, strlen(readBuf));
  12. close(fdSrc);close(fdDes);: 关闭源文件和目标文件的文件描述符。

    close(fdSrc);
    close(fdDes);
    
  13. return 0;: 程序正常结束。

这段代码的主要功能是将一个文件的内容复制到另一个文件中。它首先打开源文件,获取文件的大小,然后动态分配内存空间并读取文件内容到内存中,最后将内存中的内容写入到目标文件中。

完整代码: 

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值