进程_D1(2023-12-6)

news2025/1/20 19:10:06

①XMind

②双进程分工同时拷贝一个文件的上下两半部分

int main(int argc, const char *argv[])
{
    int pid = -1;


    //文件描述符创建(便于文件光标移动)
    //① 
    int rfd = -1;
    if( ( rfd = open("/root/fork2.c", O_RDONLY) ) == -1 )
    {
        perror("open error");
        printf("行号:%d \n\n", __LINE__);

        return -1;
    }
    int n = ( lseek(rfd,0,SEEK_END) - lseek(rfd,0,SEEK_SET) ) / 2;

    //② 
    int wfd = -1;
    if( ( wfd = open("/root/test.txt", O_WRONLY|O_CREAT|O_TRUNC, 0664) ) == -1 )
    {
        if( errno == EEXIST )
        {
            puts("文件已存在!");

            printf("行号:%d \n\n", __LINE__);

            wfd = open("/root/test.txt", O_WRONLY|O_TRUNC);
        }
        else
        {
            perror("open");

            printf("行号:%d \n\n", __LINE__);

            return -1;
        }
    }

    //③ 
    int rfd2;
    if( (rfd2 = open("/root/fork2.c", O_RDONLY) ) == -1 )
    {
        perror("open error");

        printf("行号:%d \n\n", __LINE__);

        return -1;
    }

    //④ 
    int wfd2 = -1;
    if( ( wfd2 = open("/root/test.txt", O_WRONLY|O_CREAT|O_TRUNC, 0664) ) == -1 )
    {
        if( errno == EEXIST )
        {
            puts("文件已存在!");

            printf("行号:%d \n\n", __LINE__);

            wfd2 = open("/root/test.txt", O_WRONLY|O_TRUNC);
        }
        else
        {
            perror("open");

            printf("行号:%d \n\n", __LINE__);
            return -1;
        }
    }


    char arr[10]="";

    pid = fork();

    if( pid>0 )
    {
        puts("父进程");
        printf("行号:%d \n\n", __LINE__);

        int pid2 = -1;

        pid2 = fork();

        if( pid2 == 0 )
        {
            puts("子进程② ");
            printf("行号:%d \n\n", __LINE__);

            lseek(rfd, 0, SEEK_SET);
            lseek(wfd, 0, SEEK_SET);

            while( n != lseek(rfd,0,SEEK_CUR) )
            {
                int m = read(rfd, arr, 1);

                write(wfd, arr, m);
            }
            puts("子进程②  结束!");
            printf("行号:%d \n\n", __LINE__);
            exit(0);
        }
    }
    else if( pid==0 )
    {
        puts("子进程① ");
        printf("行号:%d \n\n", __LINE__);

        lseek(rfd2, n, SEEK_SET);
        lseek(wfd2, 0, SEEK_END);

        while(1)
        {
            int m = read(rfd2,arr,1);

            if( m == 0 )
            {
                printf("子进程① \n");
                printf("行号:%d \n\n", __LINE__);

                break;
            }
            write(wfd2, arr, m);
        }
            puts("子进程①  结束!");
            printf("行号:%d \n\n", __LINE__);

            exit(0);
    }

    close(rfd);
    close(wfd);

    wait(NULL);
    wait(NULL);

    puts("拷贝成功!!!");

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1290470.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IntelliJ IDE 插件开发 | (二)UI 界面与数据持久化

系列文章 IntelliJ IDE 插件开发 |(一)快速入门 前言 在上一篇文章中介绍了在IDEA下开发、运行和安装插件的基本步骤,因此创建项目等基础步骤不再赘述,本文则开始介绍如何进行 UI 界面的开发以及相关数据的持久化存储&#xff…

吴恩达《机器学习》11-3-11-5:类偏斜的误差度量、查准率和查全率之间的权衡、机器学习的数据

一、类偏斜的误差度量 误差度量的关键性 之前的课程中已经提到了误差分析和设定误差度量值的重要性。评估学习算法并衡量其表现需要使用一个实数,这就是误差度量值。然而,在某些情况下,特别是当处理偏斜类时,选择正确的误差度量…

kafka学习笔记--基础知识概述

本文内容来自尚硅谷B站公开教学视频,仅做个人总结、学习、复习使用,任何对此文章的引用,应当说明源出处为尚硅谷,不得用于商业用途。 如有侵权、联系速删 视频教程链接:【尚硅谷】Kafka3.x教程(从入门到调优…

学习极市开发平台

这是官网的链接:极市开发者平台-计算机视觉算法开发落地平台-极市科技 (cvmart.net) 第一次用这个平台有很多问题,首先在使用这个平台之前,我大部分时候使用的是百度的飞浆平台,也就是BML,去训练一些深度学习的模型。 …

Mac端 DevEco Preview 窗口无法展示,提示文件中的node.dir错误

语雀知识库地址:语雀HarmonyOS知识库 飞书知识库地址:飞书HarmonyOS知识库 DevEco版本:Build Version: 3.1.0.501, built on June 20, 2023 环境信息 问题描述 打开 Preview 标签窗口后,提示Preview failed。 Run窗口提示如下 F…

vue2 echarts饼状图,柱状图,折线图,简单封装以及使用

vue2 echarts饼状图,柱状图,折线图,简单封装以及使用 1. 直接上代码(复制可直接用,请根据自己的文件修改引用地址,图表只是简单封装,可根据自身功能,进行进一步配置。) …

C#网络应用程序(Web页面浏览器、局域网聊天程序)

目录 一、创建Web页面浏览器 1.示例源码 2.生成效果 二、局域网聊天程序 1.类 2.服务器端 3.客户端 一、创建Web页面浏览器 TextBox 控件用来输入要浏览的网页地址,Button控件用来执行浏览网页操作, WebBrowser控件用来显示要浏览的网页。这个控…

图像处理中的角点检测Python-OpenCV 中的实现

马丁亚当斯 (Martin Adams)在Unsplash上拍摄的照片 一、说明 在图像处理的背景下,“特征”可以直观地理解为图像中易于识别并用于表示图像的独特或独特的部分。将特征视为图像中使其可区分的“地标”或“焦点”。为了使这一点更具关联性,请考虑一下您如…

gitLab 和Idea分支合并

以下二选1即可完成分支合并建议第一种简单有效 Idea合并方式 切换到被合并的分支,如我想把0701的内容合并到dev,切换到dev分支,然后再点击merge然后选择要合并的分支,即可,此时git上的代码没有更新只是把代码合到本地需要pull才…

使用Java网络编程,窗口,线程,IO,内部类等实现多人在线聊天1.0

1.整体思路 思路图 整体思路如上: 涉及知识点:线程网络编程集合IO等 TCP 协议 2.代码实现过程 服务端 import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import jav…

管理和监控CentOS上的HTTP服务

CentOS作为一款稳定的开源服务器操作系统,为各种网络服务提供了优秀的支持。其中,HTTP服务是互联网上最常用的服务之一,它为人们提供了便捷的信息访问和交互方式。在CentOS上管理和监控HTTP服务是一项重要的任务,下面我们将介绍一…

华为数通---BFD多跳检测示例

定义 双向转发检测BFD(Bidirectional Forwarding Detection)是一种全网统一的检测机制,用于快速检测、监控网络中链路或者IP路由的转发连通状况。 目的 为了减小设备故障对业务的影响,提高网络的可靠性,网络设备需要…

前端“量子纠缠”:multipleWindow3dScene 来了

最近前端实现的量子纠缠在网络上火了起来,作者bgstaal的推文:效果如下: 量子纠缠 那我们一起来看下什么是量子纠缠,以及前端是如何实现的。 什么是量子纠缠? 在量子力学里,当几个粒子在彼此相互作用后&…

【Java】实现顺序表基本的操作(数据结构)

文章目录 前言顺序表1、打印顺序表2、增加元素3、在任意位置增加元素4、判断是否包含某个元素5、查找某个元素对于的位置6、获取任意位置的元素7、将任意位置的元素设为value8、删除第一次出现的关键字9、获取顺序表长度10、清空顺序表总结 前言 在了解顺序表之前我们要先了解…

rust高级 异步编程 二 pin

文章目录 定海神针 Pin 和 Unpin为何需要 PinUnpin深入理解 PinPin 在实践中的运用固定到堆上将固定住的 Future 变为 Unpin总结 定海神针 Pin 和 Unpin 在 Rust 中,所有的类型可以分为两类: 类型的值可以在内存中安全地被移动,例如数值、字符串、布尔…

OpenCV图像相似性比对算法

背景 在做图像处理或者计算机视觉相关的项目的时候,很多时候需要我们对当前获得的图像和上一次的图像做相似性比对,从而找出当前图像针对上一次的图像的差异性和变化点,这需要用到OpenCV中的一些图像相似性和差异性的比对算法,在O…

华为数通---配置端口安全案例

端口安全简介 端口安全(Port Security)通过将接口学习到的动态MAC地址转换为安全MAC地址(包括安全动态MAC、安全静态MAC和Sticky MAC),阻止非法用户通过本接口和交换机通信,从而增强设备的安全性。 组网需…

二百一十三、Flume——Flume拓扑结构介绍

一、目的 最近在看尚硅谷的Flume资料,看到拓扑结构这一块,觉得蛮有意思,于是整理一下Flume的4种拓扑结构 二、拓扑结构 (一)简单串联 1、结构含义 这种模式是将多个flume顺序连接起来了,从最初的sourc…

一键抠图|3个智能AI抠图软件实现抠图自由!

听说你对如何利用AI抠图技术去除白色背景感兴趣?设想一下,你有一张某人站在白色背景前的照片,而你只希望能留下这个人物。在过去,你可能需要花费大量时间和精力手动进行抠图。但现在,AI技术来拯救你了!AI可…

计网实验7

解决:路由器用rip连接,主机通过域名访问,主机之间发送电子邮件 实验步骤 1.搞好部件 2.配好两台主机的ip,掩码,网关 3.连接一下两台主机,由于两台路由器没有连接,所以两台主机也无法连通,丢包率…