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;
}