当前位置: 首页 > article >正文

作业day3

请使用dup2 + fgets + printf 实现文件拷贝功能、

文件1:

复后文件:

#define BUFFER_SIZE 1024

void file_copy(const char* src_file, const char* dest_file) {
    int src_fd, dest_fd;
    char buffer[BUFFER_SIZE];

    // 打开源文件
    src_fd = open(src_file, O_RDONLY);
    if (src_fd == -1) {
        perror("打开源文件失败");
        exit(EXIT_FAILURE);
    }
    dest_fd = open(dest_file, O_WRONLY | O_CREAT | O_TRUNC, 0644);
    if (dest_fd == -1) {
        close(src_fd);
        perror("打开目标文件失败");
        exit(EXIT_FAILURE);
    }

    // 将标准输入重定向到源文件
    dup2(src_fd, STDIN_FILENO);

    // 将标准输出重定向到目标文件
    dup2(dest_fd, STDOUT_FILENO);
    close(src_fd);
    close(dest_fd);

    // 使用 fgets 和 printf 实现文件拷贝
    while (fgets(buffer, BUFFER_SIZE, stdin)) {
        printf("%s", buffer);
    }

    printf("文件拷贝完成。\n");
}

int main(int argc, const char* argv[]) {
    if (argc != 3) {
        fprintf(stderr, "用法: %s <源文件> <目标文件>\n", argv[0]);
        return EXIT_FAILURE;
    }

    const char* src_file = argv[1];
    const char* dest_file = argv[2];

    file_copy(src_file, dest_file);

    return EXIT_SUCCESS;
}
 


http://www.kler.cn/a/521361.html

相关文章:

  • Day43:列表元素的统计
  • c++ list
  • 一次端口监听正常,tcpdump无法监听到指定端口报文问题分析
  • 以用户为中心,优化 B 端界面设计
  • this、self、window、top 在 JavaScript 中的区别深入研究
  • 996引擎 - NPC-动态创建NPC
  • “AI质量评估系统:智能守护,让品质无忧
  • 人格分裂(交互问答)-小白想懂Elasticsearch
  • 1.26寒假作业
  • ray.rllib-入门实践-10:自定义环境
  • 【Elasticsearch】聚合分析:管道聚合
  • 基于 Arduino Uno 和 RFID-RC522 的 RFID 卡号读取技术详解
  • 深度学习模型架构演进:从RNN到新兴技术
  • 数据结构——查找算法和排序算法
  • 【C++】std::prev用法
  • ubuntu下编译openjdk17,依赖的包名有所不同
  • 基于 RAMS 的数据驱动建模与应用实践:从理论到具体操作
  • 1.26 实现文件拷贝的功能
  • 我的2024年年度总结
  • 自然元素有哪些选择?