#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <pthread.h>
#define N 10
void* ptr_fun(void* arg);
int size;
int rd,wd;
void main(int argc,char** argv)
{
if(argc!=3)
{
printf("參數不足\n");
return;
}
struct stat t;
stat(argv[1],&t);
size=t.st_size;
rd=open(argv[1],O_RDONLY);
wd=open(argv[2],O_WRONLY);
if(-1==wd)
{
printf("文件不存在,創建文件\n");
wd=open(argv[2],O_CREAT,0666);
close(wd);
wd=open(argv[2],O_WRONLY);
}
int i;
pthread_t tid[N];
for(i=0;i<N;i++)
{
if(0!=pthread_create(&tid[i],NULL,ptr_fun,(void*)i))
{
perror("pthread_create");
}
}
char buf[100];
int num;
lseek(rd,size/(N+1)*N,SEEK_SET);
lseek(wd,size/(N+1)*N,SEEK_SET);
while(num=read(rd,buf,sizeof(buf)))
{
write(wd,buf,num);
}
for(i=0;i<N;i++)
{
pthread_join(tid[i],NULL);
}
close(rd);
close(wd);
}
void* ptr_fun(void* arg)
{
int p=(int)arg;
char buf[size/(N+1)];
lseek(rd,size/(N+1)*p,SEEK_SET);
lseek(wd,size/(N+1)*p,SEEK_SET);
read(rd,buf,size/(N+1));
write(wd,buf,size/(N+1));
return NULL;
}
多線程實現文件拷貝
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.