8.文件操作小应用之实现cp指令(了解main函数参数的意义)

目录

1.先了解main函数参数的用法:

2.根据main函数参数的意义:拷贝文件编程思路及代码:


1.先了解main函数参数的用法:

#include <stdio.h>

int main(int argc,char **argv)
{
        printf("total params:%d\n",argc);
        printf("No.1 params :%s\n",argv[0]);
        printf("No.2 params :%s\n",argv[1]);
        printf("No.3 params :%s\n",argv[2]);

        return 0;
}

从代码运行结果可以看出:

argc      :代表的是 ./a.out  argc argv  这三个参数的个数

argv[0]  :代表第一个参数./a.out

argv[1]  :代表第二个参数 argc

argv[2]  :代表第二个参数 argv

由此可见argv是数组的数组。

2.根据main函数参数的意义:拷贝文件编程思路及代码:

我们先将源文件定为 src.c ,目标文件定为 des.c

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

运行的时候就是这样拷贝啦:  ./a.out  src.c  des.c

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>

int main(int argc,char **argv)
{
        int fdSrc;
        int fdDes;
        char *readbuf;                           //如果直接写char readbuf[1024];不初始化会造成目标文件有脏,就是可能会多出一些不明所以的符号。

        if(argc != 3){
            printf("param error\n");
            exit(-1);
        }

        fdSrc = open(argv[1],O_RDWR);            //1.打开要拷贝的源文件

        int size = lseek(fdSrc,0,SEEK_END);      //利用lseek返回值计算文件的大小  
        lseek(fdSrc,0,SEEK_SET);                 //移动光标到头   

        readbuf = (char *)malloc(sizeof(char)*size + 8);
       
        
        read(fdSrc,readbuf,size);                //2.读源文件到readbuf缓冲区
  

        fdDes = open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0600); //3.打开/创建你要拷贝到的目标文件,如果目标文件已存在有内容,O_TRUNC清除掉内容

      
        write(fdDes,readbuf,strlen(readbuf));      //4.将readbuf里面的内容写入目标文件

        
        close(fdSrc);                              //5.关闭打开的文件                      
        close(fdDes);

        return 0;
}
                       

  

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枕上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值