| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 418 人关注过本帖
标题:经典的拷贝文件代码(答疑)
只看楼主 加入收藏
xiang__jie
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2011-8-31
结帖率:71.43%
收藏
 问题点数:0 回复次数:0 
经典的拷贝文件代码(答疑)
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <string.h>
#define BUFFER_SIZE 1024

int main(int argc,char **argv){

    int from_fd,to_fd;
    int bytes_read,bytes_write;
    char buffer[BUFFER_SIZE];
    char *ptr;
   
    if(argc!=3)    {
        fprintf(stderr,"Usage:%s fromfile tofile\n\a",argv[0]);
        exit(1);
    }
   
    /* 打开源文件 */
    if((from_fd=open(argv[1],O_RDONLY))==-1)
    {
    fprintf(stderr,"Open %s Error:%s\n",argv[1],strerror(errno));
    exit(1);
    }
    /* 创建目的文件 */
    if((to_fd=open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))==-1)
    {
    fprintf(stderr,"Open %s Error:%s\n",argv[2],strerror(errno));
    exit(1);
    }
   
    /* 以下代码是一个经典的拷贝文件的代码 */
        while(bytes_read=read(from_fd,buffer,BUFFER_SIZE)){
        /* 一个致命的错误发生了 */
        /*除了被其它信号中断之外,其它所有的错误都是由程序自身引起的,显然需要退出*/
        if((bytes_read==-1)&&(errno!=EINTR)) break;
        else if(bytes_read>0)
        {
            ptr=buffer;
            while(bytes_write=write(to_fd,ptr,bytes_read)){
                /* 一个致命错误发生了 */
                if((bytes_write==-1)&&(errno!=EINTR))break;
                /* 写完了所有读的字节 */
                else if(bytes_write==bytes_read) break;
                /* 只写了一部分,继续写 */
                /*简单测试之后发现,如下的情况并未出现,难道是考虑中断后处理的?*/
                else if(bytes_write>0)
                {
                ptr+=bytes_write;
                bytes_read-=bytes_write;
                }
            }
        if(bytes_write==-1)break;
        }
            }
    close(from_fd);
    close(to_fd);
    exit(0);
}
请问 1:以上代码中文件存入缓冲区以后,当把缓冲区的内容复制给另一个文件时为什么要用另一个指针  ptr=buffer;
     2:ptr+=bytes_write;这句话中为什么把一个指针和一个缓冲写入的返回值相加,返回值为写入文档的字节数,两者难道不是数据类型不一样吗?



搜索更多相关主题的帖子: include 经典的 源文件 
2011-11-03 18:19
快速回复:经典的拷贝文件代码(答疑)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013686 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved