3

重命名(),链接()不起作用

谢谢!

4

3 回答 3

5

您是否尝试过使用标准的旧 C 函数?

`fopen` the source on one partition
`fopen` the destination on the other partition

LOOP while `fread` > 0
   `fread` from the source to a buff
   `fwrite` to the dest from a buff

然后关闭您的文件(即。fclose)。

这也便携。

编辑:如果您希望它非常基本,为什么不使用脚本语言(python/bash)并在几行内完成。

于 2011-11-02T23:46:13.863 回答
0

我就是这样做的。它非常简单,将实际复制的棘手部分留给了该cp工具,该工具已成功完成此任务数年。

#include <assert.h>
#include <string.h>

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

int
runvp(int *ret_status, const char *command, const char * const *argv)
{
  pid_t pid;
  int status;
  char * const *execv_argv;

  pid = fork();
  if (pid == (pid_t) -1)
    return -1;

  if (pid == 0) {
    /*
     * Circumvent the C type conversion rules;
     * see ISO C99: 6.5.16.1#6 for details.
     */
    assert(sizeof(execv_argv) == sizeof(argv));
    memcpy(&execv_argv, &argv, sizeof(execv_argv));

    (void) execvp(command, execv_argv);
    return -1;
  }

  if (waitpid(pid, &status, 0) == -1)
    return -1;

  *ret_status = status;
  return 0;
}

这是我几年前写fork的一个包装。execvp它可以这样使用:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv) {
  int exitcode;
  const char *cmdline[] = {
    "cp",
    "--",
    argv[1],
    argv[2],
    NULL
  };

  if (runvp(&exitcode, cmdline[0], cmdline) == -1) {
    perror("runvp");
    return EXIT_FAILURE;
  }
  return EXIT_SUCCESS;
}
于 2011-11-02T23:47:43.883 回答
-3

rename() 应该可以工作。你检查过它返回的错误吗?rename() 如果根据文档成功,则返回 0:

http://www.cplusplus.com/reference/clibrary/cstdio/rename/

您可以使用 perror() 将错误字符串打印到标准错误(stderr,通常是屏幕):

http://www.cplusplus.com/reference/clibrary/cstdio/perror/

于 2011-11-02T23:42:14.043 回答