IO接口 线程

2023-12-13 19:58:35

请使用文件I0函数拷贝- -张图片(图片就是普通文件,普通文件怎么拷贝,图片就怎么拷贝)
要求子进程拷贝后半部分,父进程拷贝前半部分。
ps:是否拷贝成功打开可以打开图形化界面查看,或者使用diff指令--》 diff 1.png 2.png
eog 1.png
代码

#include <stdio.h>
#include <func.h>

int main(int argc, const char *argv[])
{
        int ld = open("./1.png", O_RDONLY);
        if(ld < 0)
        {
            perror("open");
            return -1;
        }
        int fd = open("./111.png", O_WRONLY|O_CREAT|O_TRUNC);
        if(fd < 0)
        {
            perror("open");
            return -1;
        }

        off_t offsize = lseek(ld, 0, SEEK_END)/2;  //1/2文件大小
        ssize_t set = 0;
        char a;
        int i = 0;
        pid_t pid = fork();  //创建子
        if(pid > 0)
      {
        //打开需要写的文件  拷贝前一半

        lseek(ld,0, SEEK_SET);
        while(1)
        {
            set = read(ld, &a,sizeof(a));
        //  printf("%ld\n", set);
            write(fd, &a, set);
            i++;
            if( offsize <= i)
            {                                                      
                break;
            }
        }
    }
    //子 拷贝后面一半
    else if(pid == 0)
    {
        sleep(5);
        lseek(ld,offsize, SEEK_SET);
    while(1)
        {
        set = read(ld, &a,sizeof(a));
            if(set == 0)
            {
                break;
            }
            write(fd, &a, set);
        }
    }

    else if(pid < 0)
    {
        perror("fork");
        return -1;
    }
    return 0;
}

现象

孤儿进程?

僵尸进程?

?

?

文章来源:https://blog.csdn.net/weixin_64965464/article/details/134979286
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。