通过底层系统调用快速复制大文件
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
改成手动输入源文件和目标文件,会方便很多!
![](http://img.baidu.com/hi/jx2/j_0061.gif)
只需修改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
相关文章推荐
- 9. 文件系统——文件的压缩、解压缩、归档及底层复制命令(gzip bzip2 xz tar dd)
- Winform调用系统的剪切,复制,粘贴文件功能
- Linux下通过系统调用(API)和C语言库函数对文件进行访问
- Linux操作系统下,通过系统调用和库函数分别实现对文件的拷贝
- 利用read/write系统调用复制文件
- open系统调用流程--从vfs到底层文件系统
- Linux练习(系统调用复制文件)
- (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
- 玩转windows7系统之通过搜索功能快速搜索出想要的程序、文件或程序
- 文件复制系统调用版
- Linux系统调用实现文件复制
- C#调用系统的复制、移动、删除文件对话框
- (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
- mac系统快速复制文件或文件夹路径到剪贴板
- 通过调用系统摄像头拍照,拍视频,然后写入文件的代码范例.
- Winform调用系统的剪切,复制,粘贴文件功能
- Linux下C编程-----文件操作(1) 通过系统调用简单操作标准输入、标准输出、标准错误
- C#如何调用Windows系统自身的文件复制功能,显示文件进度,显示重名提示
- 用java通过调用C++的DLL文件来修改系统分辨率(一)
- linux应用编程笔记(5)系统调用文件编程方法实现文件复制