我有使用 fork 和 execvp 函数的代码,代码的意图是在复制完成后将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);
}
答案 0 :(得分:2)
execvp将替换当前进程的映像,即调用它的进程(使用fork创建的子进程)。那你为什么不等父母(你已经做过)让孩子完成并打印信息呢?
以下链接显示了如何测试状态和返回值。 file copy
或者,为什么不对源文件和目标文件使用fopen()或open(),并使用代码(即使用读写api)在循环中复制。这是最快的,您不再需要调用外部二进制文件来实现目标。