不带缓存的文件复制程序

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>

#define MAX_SIZE 1024

int main(int argc,char *argv[])
{
    int read_num;
    int write_num;
    int read_fd;
    int write_fd;

    char buff[MAX_SIZE];

    if(argc != 3)
    {
        printf("%s fromfile tofile/n",argv[0]);
    }

    read_fd = open(argv[1],O_RDONLY);
    
    if(read_fd == -1)
    {
        printf("open %s failure!\n",argv[1]);
        exit(1);
    }

    write_fd = open(argv[2],O_CREAT|O_WRONLY,S_IWUSR);

    if(write_fd == -1)
    {
        printf("create %s failure!\n",argv[2]);
        exit(1);
    }

    while(read_num = read(read_fd,buff,MAX_SIZE)) //未读取完时(!= 0)
    {
        if(read_num == -1) //读取出错时
        {
            printf("read date from %s fail\n",argv[1]);
            break;
        }
        else
        {
            char *p = buff;

            while(1)
            {
                write_num = write(write_fd,p,read_num);

                if(write_num == -1)
                {
                    printf("write date to %s fail\n",argv[2]);
                    break;
                }

                 if(write_num == read_num | write_num == 0) //写完一组或全部写完
                {
                    break;
                }

                if(write_num > 0)
                {
                    p = p + write_num;
                    read_num = read_num - write_num;
                }


            }
        }

    }

    close(read_fd);
    close(write_fd);

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值