父进程和子进程同时读某一个文件然后把读到的数据写到同一个文件里面。
用到的函数有:
fork、read、write、lseek。
首先使用echo命令再文件里面写入一些数据:echo {1…20}>test1
创建一个要写入数据的文档 :touch test2
准备工作做好以后就可以写程序了。
以下是代码示例:
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/stat.h>
int main()
{
pid_t pid;
int fd1,fd2;
char buf1[20];
char buf2[20];
fd1 = open("test1",O_RDWR);
fd2 = open("test2",O_RDWR|O_APPEND);
pid = fork();
if(pid < 0)
{
perror("fork\n");
_exit(1);
}
else if(pid == 0)
{
lseek(fd1,20,SEEK_SET);//先定位读指针的位置后再进行读取
read(fd1,buf1,20);
write(fd2,buf1,20);
_exit(0);
}
else
{
read(fd1,buf2,20);
write(fd2,buf2,20);
waitpid(pid,NULL,0);
}
}
运行结果:
在这里使用echo命令写入了20个数据中间有空格,所以空格也占了一个数据位。
运行结果说明可以使用fork进行多进程的copy,但是这种copy的方法是比较耗费内存的,内存大的随意,小内存就要考虑别的方法,比如多线程copy