使用多进程完成两个文件的拷贝,父进程拷贝前一半,子进程拷贝后一半,父进程回收子进程的资源。
程序代码:
#include<myhead.h>
int main(int argc, const char *argv[])
{
int srcfd=-1;
int destfd=-1;
pid_t pid=fork();
if(pid>0)
{
if((srcfd=open("./src.txt",O_RDONLY))==-1||(destfd=open("./dest.txt",O_WRONLY|O_CREAT|O_APPEND,0664))==-1)
{
perror("open error");
return -1;
}
off_t st=lseek(srcfd,0,SEEK_END);
lseek(srcfd,0,SEEK_SET);
char ch;
while(lseek(srcfd,0,SEEK_CUR)<=st/2)
{
read(srcfd,&ch,sizeof(ch));
write(destfd,&ch,sizeof(ch));
}
close(srcfd);
close(destfd);
}
else if(pid==0)
{
if((srcfd=open("./src.txt",O_RDONLY))==-1||(destfd=open("./dest.txt",O_WRONLY|O_CREAT|O_APPEND,0664))==-1)
{
perror("open error");
return -1;
}
off_t st=lseek(srcfd,0,SEEK_END);
lseek(srcfd,st/2+1,SEEK_SET);
char ch;
while(lseek(srcfd,0,SEEK_CUR)!=st)
{
read(srcfd,&ch,sizeof(ch));
write(destfd,&ch,sizeof(ch));
}
close(srcfd);
close(destfd);
exit(EXIT_SUCCESS);
}
else
{
perror("fork error");
return -1;
}
waitpid(pid,NULL,0);
puts("成功");
return 0;
}
运行结果: