Linux应用之多进程拷贝

父进程和子进程同时读某一个文件然后把读到的数据写到同一个文件里面。
用到的函数有:
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值