您的位置:首页 > 其它

通过底层系统调用快速复制大文件

2013-07-20 10:47 344 查看
/*
*  copy_block.c
*
*/
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
/* 复制数据块的函数 */
void copy_block(char * filein, char * fileout) {
int fdin, fdout;  //源文件和将要写入文件的文件描述符
char block[1024]; //定义1K的数据块
int nread;
fdin = open(filein, O_RDONLY); //以只读模式打开源文件
fdout = open(fileout, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IROTH); //创建一个权限为604的目标文件
/* 每次复制1K的数据块,直到复制完毕 */
while ((nread = read(fdin, block, 1024)) > 0) {
write(fdout, block, nread);
}

printf("Copy Success!");
close(fdin);
close(fdout);     //关闭文件
}
int main() {
char * filein="file.in";  //源文件路径
char * fileout="file.out"; //目标文件路径
copy_block(filein,fileout); //调用复制数据块函数
return 0;
}


如何运行呢?
利用time这个指令, 算出耗费时间 TIMEFORMAT="" time ./copy_block

改成手动输入源文件和目标文件,会方便很多!


只需修改main函数部分代码即可
int main(int argc, char **argv) {
/*定义源文件和目标文件*/
char * filein=NULL,* fileout=NULL;
if(argc==3)
{
filein=argv[1];
fileout=argv[2];
}
else
{
fprintf(stderr,"Syntax Error!");
return 1;
}
copy_block(filein,fileout); //调用复制数据块函数
return 0;
}


运行
[root@localhost C_test]# ./copy.block /etc/yum.conf yao.txt


如果能复制整个目录及其子目录下的文件,好像更好? 后面完善。。。

本文出自 “技术在于坚持” 博客,请务必保留此出处http://minilinux.blog.51cto.com/4499123/1253143
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: