在Linux系统中,cp指令时我们日常必不可少的操作之一,使我们对文件的复制粘贴更加的方便快捷,下面我们来了解一下它完整的函数原型以及操作流程.
我们先明白copy指令的原理:
打开(open)src文件
将src中的内容(read)读到缓存(buf)里
打开(open)/创建des文件
将刚刚(read)读到的缓存(buf)写入到des里
依次关闭(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;
}