一、编程思路:
1,打开想要复制的文件
2,将文件读到临时的buf缓冲区
3,将buf里的内容写到新的文件
4,关闭两个文件
具体实现:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char ** argv)
{
int fdSource;
int fdObject;
int fileSize;
int readSize;
int writeSize;
char *buf = NULL;
if(argc != 3){ //判断参数是否错误
printf("Sorry, your input is wrong!\n");
return -1;
}
fdSource = open(argv[1], O_RDONLY); // 打开源文件,
if(fdSource == -1){
printf("open failed!\n");
return -1;
}
fileSize = lseek(fdSource, 0, SEEK_END); //计算源文件的大小
lseek(fdSource, 0, SEEK_SET); //将光标移到开头,若不进行移动,read将读出为0
buf = (char *)malloc(sizeof(char)*fileSize); //为buf申请内存
memset(buf, '\0', fileSize); //初始化buf
readSize = read(fdSource, buf, fileSize+2);
if(readSize == -1){
printf("read failed!\n");
}
fdObject = open(argv[2], O_WRONLY|O_CREAT|O_TRUNC, 0600); //打开目标文件,若没有这
// 个文件则创建并清零。
if(fdObject == -1){
printf("object file open failed!\n");
return -1;
}
writeSize = write(fdObject, buf, strlen(buf)); //将buf写入目标文件
if(writeSize == -1){
printf("write failed!\n");
return -1;
}
free(buf); //释放buf
buf = NULL;
close(fdSource); //关闭文件
close(fdObject);
return 0;
}