利用read/write系统调用复制文件
来源:互联网 发布:手机短信推广软件下载 编辑:程序博客网 时间:2024/05/17 09:21
//copy_system.c
//NOTE: unistd.h header file should be included at first// for other header files would depend on it#include <unistd.h>#include <string.h>#include <stdlib.h>#include <stdio.h>#include <errno.h>//for files#include <fcntl.h>#include <sys/stat.h>#include <sys/types.h>#define STD_FILE_INPUT0#define STD_FILE_OUTPUT1#define STD_FILE_ERROR2#define EACH_UNIT 128int main(int argc, char* argv[]){const char *src_file = "./draft1.txt";const char *dest_file = "./draft2.txt";//open two filesint fd_src = open(src_file, O_RDONLY);if(fd_src == -1){char err[128];sprintf(err, "open src file failed, errno = %d \n", errno);write(STD_FILE_OUTPUT, err, strlen(err)+1);return -1;}int fd_dest = open(dest_file, O_WRONLY | O_CREAT, S_IWUSR | S_IRUSR);if(fd_dest == -1){char err[128];sprintf(err, "open [O_WRONLY] dest file failed, errno = %d \n", errno);write(STD_FILE_OUTPUT, err, strlen(err)+1);fd_dest = open(dest_file, O_CREAT, S_IWUSR | S_IRUSR);if(fd_dest == -1) {char err[128];sprintf(err," create [ S_IWUSR | S_IRUSR] dest file failed, errno = %d \n", errno);write(STD_FILE_OUTPUT, err, strlen(err)+1);close(fd_src);return -1;}}int nread = 1;while(nread){char c ; //nread = read(fd_src, &c, sizeof(c));char data[EACH_UNIT] = {0};nread = read(fd_src, &data, sizeof(data));if(-1 != nread){//fd_src+=nread;printf("[while] - nread :%d \n", nread );//文件句柄自己追加,不需要开发者移位//int nwrite = write(fd_dest, &c, nread); int nwrite = write(fd_dest, &data, nread); printf("[while] - nwrite :%d \n", nwrite );if(nwrite == -1){const char * err_msg_write = "write error\n";write(STD_FILE_OUTPUT, err_msg_write, sizeof(err_msg_write)/ sizeof(err_msg_write[0]));close(fd_dest);close(fd_src);return -2;}//fd_dest+=nwrite;}else{const char * err_msg_read = "read error\n";write(STD_FILE_OUTPUT, err_msg_read, sizeof(err_msg_read)/ sizeof(err_msg_read[0]));close(fd_dest);close(fd_src);return -3;}}//while//close both file handlesclose(fd_dest);close(fd_src);return 0;}/*测试花费时间[queyue@localhost file-system]$ TIMEFORMAT="" time ./test-copy-system [while] - nread :128 [while] - nwrite :128 [while] - nread :14 [while] - nwrite :14 [while] - nread :0 [while] - nwrite :0 0.00user 0.00system 0:00.00elapsed ?%CPU (0avgtext+0avgdata 432maxresident)k0inputs+0outputs (0major+141minor)pagefaults 0swaps*/
0 0
- 利用read/write系统调用复制文件
- write、read系统调用
- read和write系统调用
- read和write系统调用
- eCryptfs - read/write系统调用
- linux中的read和write系统调用
- 常用系统调用write、read、ioctl
- read、write系统调用与IO库函数
- read write 调用过程 文件读写 分析
- 系统函数-文件操作-write() read()
- linux 2.6.11内核文件IO的系统调用实现分析(read,write)(转载)
- 文件I/O-003.read和write复制文件
- 汇编语言调用Linux系统调用read和write
- Linux下read和write函数复制一个文件
- 龙芯汇编语言-利用系统调用复制文件
- read 系统调用剖析--file_operations中read/write函数与内核系统调用的关系
- read 系统调用剖析--file_operations中read/write函数与内核系统调用的关系
- read 系统调用剖析--file_operations中read/write函数与内核系统调用的关系
- android基础之SQLite:
- sqoops数据的导入导出
- 用列表显示自定义布局的内容-BaseAdapter
- git 查看远程分支、本地分支、删除本地分支
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 利用read/write系统调用复制文件
- 朴素贝叶斯简记
- 关于mysql安装的一些小问题
- Activity的状态
- Angularjs中scope的一些属性
- hadoop伪发布安装配置
- Yii操作cookie
- Linux环境编程导引
- 关于有偿提供拼图响应式后台的通知