6.27 作业

1.使用多线程实现两个文件的拷贝

#include <myhead.h>
typedef struct{
	const char *f1;//源文件
	const char *f2;//目标文件
	long start;//开始的字节
	long end;//结束的字节
}lofo;
void* task(void *arg)
{
	lofo *p = arg;
	int f1,f2;
	if((f1=open(p->f1,O_RDONLY))==-1)//以只读打开
	{
		perror("open error");
		return NULL;
	}
	if((f2=open(p->f2,O_WRONLY))==-1)//以只写打开
	{
		perror("open error");
		return NULL;
	}
	long size = p->end-p->start;
	lseek(f1,p->start,SEEK_SET);
	lseek(f2,p->start,SEEK_SET);
	char a;
	int c=0;
	while(c<size)
	{
		read(f1,&a,1);
		write(f2,&a,1);
		c++;
	}
	close(f1);
	close(f2);	
}
 
int main(int argc,const char *argv[])
{
	pthread_t tid;//线程id
	int f1,f2;//f1为源文件,f2为目标文件
	if((f1=open(argv[1],O_RDONLY))==-1)//以只读打开
	{
		perror("open error");
		return -1;
	}
	if((f2=open(argv[2],O_RDWR|O_CREAT|O_TRUNC,664))==-1)//以读写打开,如果没有则创建,有就清空
	{
		perror("open error");
		return -1;
	}
	long size = lseek(f1,0,SEEK_END);//计算f1长度
	close(f1);
	close(f2);
 
	lofo arg[2]={{argv[1],argv[2],0,size/2},{argv[1],argv[2],size/2,size}};
	if(pthread_create(&tid,NULL,task,&arg[0]))//使用线程执行前一半复制
	{
		perror("create error");
		return -1;
	}
	if(pthread_create(&tid,NULL,task,&arg[1]))//使用线程执行后一半复制
	{
		perror("create error");
		return -1;
	}
	sleep(1);
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值