使用多进程完成两个文件的拷贝,父进程拷贝前一半,子进程拷贝后一半,父进程回收子进程的资源。
程序代码:
#include <myhead.h>
typedef struct
{
int start;//拷贝的起始位置
int end;//拷贝的结束位置
int source_fd;//被拷贝的源文件
int dest_fd;//拷贝出来的目标文件
}ThreadArg;
void *half_copy(void *arg)
{
ThreadArg *thread_arg =(ThreadArg *)arg;
lseek(thread_arg->source_fd,thread_arg->start,SEEK_SET);
lseek(thread_arg->dest_fd,thread_arg->start,SEEK_SET);
char buf[128];
int sum=0;
//循环写入
while(1)
{
int res=read(thread_arg->source_fd,buf,sizeof(buf));
sum+=res;
int len=thread_arg->end - thread_arg->start;
if(sum >=len ||res==0)
{
write(thread_arg->dest_fd,buf,res-(sum-len));
break;
}
write(thread_arg->dest_fd,buf,res);
}
}
int main(int argc, const char *argv[])
{
//打开源文件和目标文件
int source_fd,dest_fd;
if((source_fd=open("./02ptread.c",O_RDONLY))==-1)
{
perror("open error");
return -1;
}
if((dest_fd=open("./test.txt",O_WRONLY|O_CREAT,0664))==-1)
{
perror("open error");
return -1;
}
int size=lseek(source_fd,0,SEEK_END);
int halfsize=size/2;
pthread_t thread1,thread2;
ThreadArg arg1 ={0,halfsize,source_fd,dest_fd};
ThreadArg arg2 ={halfsize,size,source_fd,dest_fd};
pthread_create(&thread1,NULL,half_copy,&arg1);
pthread_create(&thread2,NULL,half_copy,&arg2);
pthread_join(thread1,NULL);
pthread_join(thread2,NULL);
close(source_fd);
close(dest_fd);
return 0;
}
运行结果:

C语言实现多进程并发文件半拷贝:父进程分工与资源管理
本文介绍了一段C语言代码,通过创建两个子进程并行完成文件的拷贝,父进程负责前半部分,子进程负责后半部分,最后父进程回收子进程资源。展示了并发编程在文件操作中的应用。
89

被折叠的 条评论
为什么被折叠?



