2024.7.31 多线程

题目

1> 使用父子进程完成两个文件的拷贝,父进程拷贝前一半内容,子进程拷贝后一半内容,子进程结束后退出,父进程回收子进程的资源

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>

int main(int argc, const char *argv[])
{
    if (argc != 3)
    {
        fprintf(stderr, "Usage: %s srcfile destfile\n", argv[0]);
        return EXIT_FAILURE;
    }

    FILE *sfp = fopen(argv[1], "r");
    if (!sfp)
    {
        perror("Failed to open source file");
        return EXIT_FAILURE;
    }

    FILE *dfp = fopen(argv[2], "w");
    if (!dfp)
    {
        perror("Failed to open destination file");
        fclose(sfp);
        return EXIT_FAILURE;
    }

    // 计算行数
    int count = 0;
    char c;
    while ((c = fgetc(sfp)) != EOF)
    {
        if (c == '\n')
            count++;
    }
    rewind(sfp); // 重置文件指针

    pid_t pid = fork();
    if (pid < 0)
    {
        perror("Failed to fork");
        fclose(sfp);
        fclose(dfp);
        return EXIT_FAILURE;
    }

    if (pid > 0)
    {
        // 父进程
        char buf[1024];
        int line_count = 0;
        while (fgets(buf, sizeof(buf), sfp) && line_count < count / 2)
        {
            fputs(buf, dfp);
            line_count++;
        }
        fclose(dfp);
        // 等待子进程结束
        wait(NULL);
        printf("复制成功\n");
        fclose(dfp);
        fclose(sfp);
    }
    else if (pid == 0)
    {
        FILE *dfp = fopen(argv[2], "a");
        if (!dfp)
        {
            perror("Failed to open destination file");
            fclose(sfp);
            return EXIT_FAILURE;
        }
        // 子进程
        char discard_buf[1024];
        for (int i = 0; i < count / 2; i++)
        {
            if (!fgets(discard_buf, sizeof(discard_buf), sfp))
                break;
        }
        _exit(EXIT_SUCCESS);
    }
    return 0;
}

思维导图

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CP2K是一个强大的量子力学计算软件包,常用于分子模拟和材料科学研究。CP2K 2024.1的安装教程可能会因操作系统的不同而有所差异,这里提供一个通用的大致步骤: 1. **系统需求**: - 检查您的计算机是否满足CP2K的最低硬件要求,如64位处理器、足够的内存和硬盘空间。 - 通常推荐使用支持OpenMP或多线程技术的操作系统,如Linux(Ubuntu、CentOS)、macOS或Windows(通过WSL或Docker)。 2. **下载安装文件**: 访问CP2K官方网站(https://www.cp2k.org/download),找到对应版本的二进制安装包或者源码。如果你需要编译从源代码,你需要Git等基本开发工具。 3. **安装前准备**: - 安装必要的依赖,比如Python(作为CP2K的脚本语言)、MPI库(用于并行计算)、BLAS和LAPACK(数值库)等。 4. **二进制安装**(适用于预编译的系统): - 双击运行下载的安装包,按照向导提示进行下一步操作,包括接受许可协议、选择安装路径等。 5. **源码编译**(适用于Linux): - 在终端中解压源码,进入目录。 ``` tar xvf cp2k-2024.1.tar.gz cd cp2k-2024.1 ``` - 配置环境,设置编译选项(如并行处理级别、优化等级等): ``` ./configure ``` - 编译并安装: ``` make && make install ``` 6. **配置环境变量**: - 添加CP2K到系统PATH,使命令行可以识别和执行CP2K程序。 7. **验证安装**: 运行`cp2k`命令检查是否能够正常启动,并测试一个简单的例子。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值