1

我有使用forkexecvp函数的 c 代码,代码的目的是在复制完成后将 src_file 复制到 target_path,通知用户其状态(打印消息)

我知道 execvp 的使用会替换当前的进程映像。我想知道的是,是否有任何替代方案,以便在完成提供给 execvp 的 cmd 后,控制返回到我的程序并运行后续代码。

pid = fork();
if (pid == 0) {
  /* child path */
  printf("Hello, This is CHILD(%d).\n", getpid());
  execvp("cp", av);
  printf("Completed Copying\n");
}
else {
  /* Parent's path */
  printf("Hello, This is PARENT(%d).\n", getpid());
  wait(NULL);
}
4

1 回答 1

2

execvp 将替换当前进程的映像,即调用它的进程(这是您使用 fork 创建的子进程)。那么,您为什么不直接在父母中等待(就像您已经做过的那样)让孩子完成并打印消息?

以下链接显示了如何测试状态和返回值。 文件副本

或者,为什么不对源文件和目标文件使用 fopen() 或 open() 并使用代码循环复制,即使用读写 api。这是最快的,您不再需要调用外部二进制 cp 来实现您的目标。

于 2012-10-23T06:36:35.107 回答