day27——homework

news2024/12/27 14:01:26

1、使用两个线程完成两个文件的拷贝,分支线程1拷贝前一半,分支线程2拷贝后一半,主线程回收两个分支线程的资源

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <fcntl.h>
#include <unistd.h>
void *copy_first_half(void *arg)
{
    int fd1 = ((int *)arg)[0];
    int fd2 = ((int *)arg)[1];
    off_t filesize = lseek(fd1, 0, SEEK_END);
    lseek(fd1, 0, SEEK_SET);
    off_t half_size = filesize / 2-1;
    char buffer[1];
    ssize_t bytes_read;
    off_t start = 0;
    while (1)
    {
        bytes_read = read(fd1, buffer, sizeof(buffer));
        write(fd2, buffer, bytes_read);
        if (start >= half_size)
        {
            break;
        }
        start += bytes_read;
    }

    return NULL;
}
void *copy_second_half(void *arg)
{
    sleep(1);
    int fd1 = ((int *)arg)[0];
    int fd2 = ((int *)arg)[1];
    off_t filesize = lseek(fd1, 0, SEEK_END);
    off_t half_size = filesize / 2;
    lseek(fd1, half_size, SEEK_SET);
    char buffer[1];
    ssize_t bytes_read;
    off_t start = half_size;
    while (1)
    {
        bytes_read = read(fd1, buffer, sizeof(buffer));
        write(fd2, buffer, bytes_read);
        if (start >= filesize)
        {
            break;
        }
        start += bytes_read;
    }

    return NULL;
}
int main()
{
    int fd1 = open("source.txt", O_RDONLY | O_CREAT, 0664);
    int fd2 = open("destination.txt", O_WRONLY | O_CREAT | O_TRUNC, 0664);
    if (fd1 == -1 || fd2 == -1)
    {
        perror("打开文件出错\n");
        exit(EXIT_FAILURE);
    }

    pthread_t thread1, thread2;
    int ret1, ret2;
    //添加文本
    int arg1[] = {fd1, fd2};
    int arg2[] = {fd1, fd2};
    // 创建第一个线程
    ret1 = pthread_create(&thread1, NULL, copy_first_half, (void *)arg1);
    if (ret1 != 0)
    {
        printf("Error creating thread 1\n");
        return 1;
    }
    // 创建第二个线程
    ret2 = pthread_create(&thread2, NULL, copy_second_half, (void *)arg2);
    if (ret2 != 0)
    {
        printf("Error creating thread 2\n");
        return 1;
    }
    // 等待两个线程结束
    pthread_join(thread1, NULL);
    pthread_join(thread2, NULL);
    close(fd1);
    close(fd2);
    printf("文件复制成功。\n");

    return 0;
}

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

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

相关文章

释放自动化测试潜能:性能优化策略与实战技巧!

引言 在当今追求软件快速迭代的环境下&#xff0c;自动化测试的性能瓶颈正成为制约开发流程加速的主要障碍。本文将深入探讨如何通过策略和实践&#xff0c;优化自动化测试的性能&#xff0c;实现测试执行速度的质的飞跃。 自动化性能瓶颈的识别与突破 首先&#xff0c;识别并…

Day4

请求与响应 请求和响应是Web应用的基本组成部分&#xff0c;它们处理客户端&#xff08;通常是浏览器&#xff09;和服务器之间的交互。 注意三个常见的请求和响应就行&#xff1a; 【注意】&#xff1a; 关于重定向&#xff1a; 浏览器向某个网站发来请求&#xff0c;该网…

在Windows系统上生成SSH秘钥

SSH秘钥是指在SSH协议中使用的加密密钥&#xff0c;用于实现安全认证和数据加密。SSH秘钥通常指的是一对密钥&#xff1a;公钥&#xff08;Public Key&#xff09;和私钥&#xff08;Private Key&#xff09;。 使用以下命令生成SSH密钥 输入下面命令行生成SSH秘钥&#xff0c…

slot 插槽的方式

当组件作为标签使用时&#xff0c;子组件中用slot标签占一个位置&#xff0c;父组件可以在此填充数据&#xff0c;父组件未填充数据&#xff0c;有默认数据 则显示默认数据 具名插槽&#xff1a;子组件中slot标签有name属性&#xff0c;如name“title”&#xff0c;父组件可以用…

Spring面试篇章——Spring基本概述

Spring 的基本概述 Spring学习的核心内容—一图胜千言 IOC&#xff1a;控制反转&#xff0c;可以管理 Java 对象AOP&#xff1a;切面编程JDBCTemplate&#xff1a;是Spring提供一套访问数据库的技术&#xff0c;应用性强&#xff0c;相对好理解声明式事务&#xff1a;基于IOC …

操作系统篇--八股文学习第十一天|进程调度算法你了解多少,进程间有哪些通信方式,解释一下进程同步和互斥,以及如何实现进程同步和互斥

进程调度算法你了解多少&#xff1f; 答&#xff1a; 先来先服务&#xff1a;按照请求的顺序进行调度。 这种调度方式简单&#xff0c;但是能导致较长作业阻塞较短作业。最短作业优先&#xff1a;非抢占式的调度算法&#xff0c;按估计运行时间最短的顺序进行调度。 但是如果…

selenium之批量上传文件

在UI自动化测试过程经常会有上传附件的操作&#xff0c;针对附件上传的场景&#xff0c;通常可以归为几类&#xff1a; 场景一&#xff1a;只上传一个附件场景二&#xff1a;上传固定几个附件场景三&#xff1a;上传动态数量的附件 2.针对以上几种场景&#xff0c;以动态文件数…

【iOS】APP仿写——学生管理系统

前言 学生管理系统和C语言学生管理系统要求相似&#xff0c;需要实现增删改查排序功能&#xff0c;这个仿写比较简单&#xff0c;但通过这个仿写中的限制输入的要求&#xff0c;初步了解了正则表达式。 注册、登陆界面 这个界面和3G share相同&#xff0c;这里就不多做解释了…

C语言 | Leetcode C语言题解之第309题买卖股票的最佳时机含冷冻期

题目&#xff1a; 题解&#xff1a; int maxProfit(int* prices, int pricesSize) {if (pricesSize 0) {return 0;}int f0 -prices[0];int f1 0;int f2 0;for (int i 1; i < pricesSize; i) {int newf0 fmax(f0, f2 - prices[i]);int newf1 f0 prices[i];int newf2…

芋道源码yudao-cloud 二开笔记(Feign服务调用,如何定义一个 API 接口)

在yudao-cloud如何定义一个Api接口&#xff0c;提供给另一个服务去调用&#xff1f;下面是 yudao-module-syetem系统服务 调用 yudao-module-infra文件服务的示例&#xff1a; 首先需要在服务提供者yudao-module-infra定义好对应的api&#xff0c; 第1步&#xff1a; cn.iocod…

c++中的Stack与Queue

目录 一queue与stack&#xff1a; 1.queue介绍&#xff1a; 2.queue模拟实现&#xff1a; 3stack介绍&#xff1a; 4stack模拟实现&#xff1a; 二priority_queue&#xff08;优先队列&#xff09;&#xff1a; 1介绍&#xff1a; 2仿函数&#xff1a; 3模拟实现&#…

学懂C语言(三十三):C语言 递归详解

目录 一、C语言递归 1、语法格式 2、流程图 示例1&#xff1a;数的阶乘 示例2&#xff1a;斐波那契数列 二、递归的基本要素 三、递归的工作原理 四、递归的优势与劣势 五、递归的应用示例 六、递归与非递归&#xff08;迭代&#xff09;的比较 一、C语言递归 递归指…

Navicat 在整个数据库中查找字符

Navicat 在整个数据库中查找字符 1.首先打开Navicat,连接目标数据库。2.选择工具选项卡&#xff0c;选择在数据库或模式中查找。3.查找前填入关键字信息&#xff0c;点击查找4.双击查找到数据&#xff0c;进行查看 说明&#xff1a;当我们知道数据库有数据的关键字&#xff0c;…

只有经历了无数超预期的BUG才知道Hutool有多香

目录 Hutool资源 为什么要Hutool Hutool核心模块 代码精进之道 如何更上一层楼 Htool官网是这样介绍自己的&#xff1a; Hutool是一个小而全的Java工具类库&#xff0c;通过静态方法封装&#xff0c;降低相关API的学习成本&#xff0c;提高工作效率&#xff0c;使Java拥有…

反序列化靶机serial

1.创建虚拟机 2.渗透测试过程 探测主机存活&#xff08;目标主机IP地址&#xff09; 使用nmap探测主机存活或者使用Kali里的netdicover进行探测 -PS/-PA/-PU/-PY:这些参数即可以探测主机存活&#xff0c;也可以同时进行端口扫描。&#xff08;例如&#xff1a;-PS&#xff0…

(~_~)

一、用不同url头利用python访问一个网站&#xff0c;并把返回的东西保存为 requests库 主要用于http发送请求和处理响应 1.发送get和post请求 requests.get(目标网址) requests.post(url,data) post于get不同的是get一般用来请求获取数据&#xff0c;而post相当于带着数…

WEB前端14-Element UI(学生查询表案例/模糊查询/分页查询)

Vue2-Element UI 1.可重用组件的开发 可重用组件 我们一般将可重复使用的组件放在components目录之下&#xff0c;以便父组件的灵活调用 <!--可重用组件一般与css密切相关&#xff0c;使用可重用组件的目的是&#xff0c;将相似的组件放在一起&#xff0c;方便使用-->…

SYD88xx代码复位不成功和解决办法

原来的复位代码如下: void ota_manage(void){#ifdef _OTA_if(ota_state){switch(ota_state){case 1 : #if defined(_DEBUG_) || defined(_SYD_RTT_DEBUG_)dbg_printf("start FwErase\r\n");#endifCmdFwErase();#if defined(_DEBUG_) || defined(_SYD_RTT_DEBUG_)db…

计算机毕业设计选题推荐-社区停车信息管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

Linux 内核块设备

磁盘&#xff08;disk&#xff09;是指利用磁记录技术存储数据的存储器。 磁盘是计算机主要的存储介质&#xff0c;可以存储大量的二进制数据&#xff0c;并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘&#xff08;Floppy Disk&#xff0c;简称软盘&#xff09;…