今天自己写了一个mycpy程序,实现的是将一个文件copy到另一个新建的文件。#include #include #include #include #include #include #define BUFSIZE 32int main(int argc, char **argv){ int fdr, fdw; int ret; char buf[BUFSIZE]; int rdlen, wrlen; if (argc != 3){ fprintf(stderr, "argment....\n"); return 1; } fdr = open(argv[1], O_RDONLY); if (fdr == -1){ perror(argv[1]); return 1; } fdw = open(argv[2], O_CREAT | O_RDONLY | O_WRONLY | O_TRUNC, S_IRWXU);//这里目标文件可能需要在打开的时候创建O_CREAT,创建的权限是可读可写可执行S_IRWXU。并将文件指针指向文件的开始O_TRUNC, if (fdw == -1){ perror(argv[2]); return 1; } while(1){//当使用while循环时,不好设置条件的时候,可以使用‘1’作为条件,并在循环中用break跳出循环。 rdlen = read(fdr, buf, BUFSIZE); if (rdlen == 0){ break;//使用break跳出循环。 } if (rdlen == -1){ if (errno == EINTR){//注意这里的错误处理。read这个系统调用有可能会被中断打断。 continue; } perror("read()"); close(fdr);//注意这里的错误处理。 close(fdw); return 1; } wrlen = 0;//留意这里的write文件处理,wrlen的初始化及ret的定义。 while(wrlen < rdlen){//循环条件很重要。 ret = write(fdw, buf+wrlen, rdlen - wrlen);//留意这里的buf地址和写入长度的变化。 if (ret == -1){ if (errno == EINTR){ continue; } perror("write()"); close(fdr); close(fdw); return 1; } wrlen += ret; } } close(fdw); close(fdr); return 0;}
阅读(442) | 评论(0) | 转发(0) |