Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15961
  • 博文数量: 9
  • 博客积分: 411
  • 博客等级: 一等列兵
  • 技术积分: 120
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-13 22:50
文章分类

全部博文(9)

文章存档

2011年(2)

2010年(7)

我的朋友

分类: C/C++

2010-12-25 22:16:22

今天自己写了一个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;}                                                                                                                                          
阅读(419) | 评论(0) | 转发(0) |
0

上一篇:USB驱动框架

下一篇:myls

给主人留下些什么吧!~~