


include <myhead.h>
oid *task( void *file_size)int file_size1=*(int*)file_size;//打开源文件int fd=open("./hello",O_RDONLY);if(fd==-1){perror("open error\n");return NULL;}//打开目标文件int fd1=open("./world",O_WRONLY);if(fd1==-1){perror("open error\n"); return NULL;}int num=file_size1/2;//移动光标lseek(fd,num,SEEK_SET);lseek(fd,num,SEEK_SET);char arr1[50]="";while(1){int size=read(fd,arr1,sizeof(arr1));if(size==0){break;}write(fd1,arr1,size);}nt main(int argc, const char *argv[])if(argc!=3){printf("格式错误:%s <源文件> <目标文件> ",argv[0]);return -1;}//打开源文件int fd=open(argv[1],O_RDONLY);if(fd==-1){perror("open error\n");return -1;}//计算文件大小int file_size=lseek(fd,0,SEEK_END);//计算拷贝的大小int helf_size=file_size/2;//创建目标文件int fd1=open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0664);if(fd1==-1){perror("open and creat file error\n");return -1;}//创建一个线程//定义一个线程变量,用来接收线程号pthread_t tid=-1;if(pthread_create(&tid,NULL,task,&file_size)!=0){printf("pthread create error\n");return -1;}//拷贝前一半内容//把光标移到文件开头lseek(fd,0,SEEK_SET);lseek(fd1,0,SEEK_SET);char arr[50]="";int temp;int size;while(1){size=read(fd,arr,sizeof(arr));temp+=size;if(size==0&&temp>helf_size){write(fd1,arr,size-(temp-helf_size));break;}write(fd1,arr,size);}return 0;