利用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
原创粉丝点击