【问题标题】:Copies contents from one file to another将内容从一个文件复制到另一个文件
【发布时间】:2026-02-02 16:15:01
【问题描述】:

在 linux 平台 (ubuntu) 上用 c 语言编写一个将内容从一个文件复制到另一个文件的程序,或者在 ubuntu 中创建一个复制文件的程序

【问题讨论】:

  • 这听起来像是家庭作业。如果是这样的话,我们对这里的人不屑一顾。我们将帮助您解决具体问题,但我们不会为您做这件事。如果不是,请对您的问题更具体一点……而不仅仅是“请为我写这个。”
  • 好的 - 我已经做到了......现在呢?您的尝试在哪里遇到问题?

标签: c command cp


【解决方案1】:

我会考虑使用重定向和管道,就像使用 Shell 一样?下面的这个例子来自我写的一个shell,这就是重定向功能。 (>>) 所以你可以做 file1 >> file2 它将一个文件的内容复制到另一个文件。

open(file[0], O_RDWR | O_CREAT, 0666); and while ((count = read(0, &c, 1)) > 0)
          write(fd, &c, 1)

; //写入文件是重要的部分

void redirect_cmd(char** cmd, char** file) {
  int fds[2]; // file descriptors
  int count;  // used for reading from stdout
  int fd;     // single file descriptor
  char c;     // used for writing and reading a character at a time
  pid_t pid;  // will hold process ID; used with fork()

  pipe(fds);


  if (fork() == 0) {
    fd = open(file[0], O_RDWR | O_CREAT, 0666);
    dup2(fds[0], 0);
    close(fds[1]);

    // Read from stdout
    while ((count = read(0, &c, 1)) > 0)
      write(fd, &c, 1); //Write to file

    exit(0);

  //Child1
  } else if ((pid = fork()) == 0) {
    dup2(fds[1], 1);

    //Close STDIN
    close(fds[0]);

    //Output contents
    execvp(cmd[0], cmd);
    perror("execvp failed");

  //Parent
  } else {
    waitpid(pid, NULL, 0);
    close(fds[0]);
    close(fds[1]);
  }
}

【讨论】:

    【解决方案2】:

    总体思路

    • 使用fopen打开一个文件
    • 使用 fopen 打开第二个文件
    • 使用fread从第一个文件读取
    • 使用fwrite写入第二个文件

    • 如果需要写入格式化数据,可以用scanf 代替 fread,用fprintf 代替 fwrite。

    【讨论】:

    • 对于文件复制,您不会替换 scanf() 和 printf(),因为数据没有格式化。
    • 取决于任务的具体情况,但这就是为什么我把它们作为替代品
    【解决方案3】:

    您没有指定必须使用哪种编程语言。所以,我假设你正在使用 bash。编写一个使用cp 命令的脚本,你的任务就解决了。

    【讨论】:

    • “编写一个程序,将内容从一个文件复制到另一个in c...”。 “问题”(如果你想这样称呼它)也用 C 标记。
    • 我的错误。下次我会更小心的。而且“C”标签很窄;-)
    • 我承认这一点。这是一个鬼鬼祟祟的小家伙。
    最近更新 更多