#include <myhead.h>
int main(int argc, const char *argv[])
{
pid_t cpid = fork();
int fd_r = open("./12.jpg",O_RDONLY);
if(0 < fd_r){
perror("open");
return -1;
}
printf("open succese\n");
int fd_w = open("./12.jpg",O_WRONLY | O_CREAT | O_TRUNC,0664);
off_t size = lseek(fd_r,0,SEEK_END);
if(cpid > 0){
char arr1[10];
sprintf(arr1,"%d",fd_r);
char arr2[10];
sprintf(arr2,"%d",fd_w);
char arr3[10];
sprintf(arr3,"%ld",size);
execl("p",arr1,arr2,arr3,NULL);
}
else if(cpid==0){
int fd_r = atoi(argv[0]);
int fd_w = atoi(argv[1]);
off_t size = atoi(argv[2]);
sleep(4);
lseek(fd_r,size/2,SEEK_SET);
lseek(fd_w,size/2,SEEK_SET);
char c;
for(int i=0;i<size/2;i++){
read(fd_r,&c,1);
read(fd_w,&c,1);
}
printf("后半部分拷贝完毕\n");
}
if(close(fd_r < 0)){
perror("fork");
return -1;
}
close(fd_r);
close(fd_w);
return 0;
}
改写:
#include <myhead.h>
int main(int argc, const char *argv[])
{
int fd_r = atoi(argv[0]);
int fd_w = atoi(argv[1]);
off_t size = atoi(argv[2]);
sleep(4);
lseek(fd_r,size/2,SEEK_SET);
lseek(fd_w,size/2,SEEK_SET);
char c;
for(int i=0;i<size/2;i++){
read(fd_r,&c,1);
read(fd_w,&c,1);
}
printf("后半部分拷贝完毕\n");
close(fd_r);
close(fd_w);
return 0;
}