IO进程-day3

1>多线程实现文件拷问

代码:


#define MAXSIZE 1024
#include<myhead.h>

int main(int argc, char const *argv[])
{
    FILE *srcfp=NULL;
    FILE *destfp=NULL;

    if((srcfp = fopen("./pm.bmp", "r+")) == NULL)
    {
        perror("fopen error");
        return -1;
    }

    //定义变量接收大小
    int bmpSize = 0;
    //将光标后移2字节
    fseek(srcfp, 2, SEEK_SET); 

    //读取图像的大小
    fread(&bmpSize, sizeof(int), 1, srcfp); 
    fclose(srcfp);

    if(!(srcfp=fopen("pm.bmp","r")))
        PRINT_ERR("");
    if(!(destfp=fopen("pm1.bmp","w")))
        PRINT_ERR("");
    char buf[MAXSIZE];
    int ret=0;

    pid_t pid =fork();

    if(pid>0){
        while(1){
            int temp=bmpSize/2-ftell(srcfp);
            if(temp>0&&temp<sizeof(buf)){
                ret = fread(buf, 1, temp, srcfp);
		        fwrite(buf, 1, ret, destfp);
                break;
            }
            ret = fread(buf, 1, sizeof(buf), srcfp);
		    fwrite(buf, 1, ret, destfp);
        }

    }
    else if (pid==0){
        fseek(srcfp,bmpSize/2,SEEK_SET);
        while((ret = fread(buf, 1, sizeof(buf), srcfp))!= 0)
		    fwrite(buf, 1, ret, destfp);
        exit(EXIT_SUCCESS);
    }
    else
        PRINT_ERR("");
    //wait(NULL);
    fclose(srcfp);
    fclose(destfp);
    return 0;
}

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值