Linux cp函数源代码以及剖析原理

在Linux系统中,cp指令时我们日常必不可少的操作之一,使我们对文件的复制粘贴更加的方便快捷,下面我们来了解一下它完整的函数原型以及操作流程.

我们先明白copy指令的原理:

  1. 打开(open)src文件

  1. 将src中的内容(read)读到缓存(buf)

  1. 打开(open)/创建des文件

  1. 将刚刚(read)读到的缓存(buf)写入到des里

  1. 依次关闭(close)两个文件

通过以上的原理分析,让我们对它有初步的了解,下面我们讲代码部分:

在main函数中先声明两个变量:

int main(int argc,char **argv)
{
    return 0;
}

我们先看int argc,可以将他分为三个小块,也就是指令操作的流程:

cp(指令)、src(源文件)、des(目标文件)

再将它们三个归纳到char **argc中,它是一个指针数组,它们分别是:

argv[0]、argv[1]、argv[2]

然后我们将上面的原理分析带入到代码中

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main(int argc,char **argv)
{
    int fdSrc;
    int fdDes;
    char *read_buf = NULL;

    if(argc != 3){//如果执行不成立
        printf("pararm error!\n");
        exit(-1);
    }

    /*打开(open)src文件*/
    fdSrc = open(argv[1],O_RDWR); //打开src
    int size = lseek(fdSrc,0,SEEK_END);//计算src的大小
    lseek(fdSrc,0,SEEK_SET); //光标定位头

    /*将src中的内容(read)读到缓存(buf)里*/
    read_buf = (char*)malloc(sizeof(char)*size + 8);//给读取的内容开辟内存 
    int n_read = read(fdSrc,read_buf,size);//读src里面的内容,size的大小

    /*打开(open)/创建des文件*/
    fdDes = open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0600); //打开des,可读可写,可创
建,清空内容
    
    /*将刚刚(read)读到的缓存(buf)写入到des里*/
    int n_write = write(fdDes,read_buf,strlen(read_buf));  //将des写入
    
    /*依次关闭(close)两个文件*/
    close(fdSrc);
    close(fdDes);

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值