我正在编写一个C程序,我需要在代码中间复制一些目录。所以我写了这个函数,我尝试使用fork然后使用execvp。但是这段代码似乎没有输入pid == 0,也不低于0。有什么不对?如果重要,我会使用minix
void execCopy() {
printf("I'm in execCopy\n");
printf("ERROR 0: %s\n",strerror(errno));
int pid = fork();
if(pid < 0) {
printf ("fork failed with error code= %d\n", pid);
fprintf(stderr,"FORK error\n");
}
printf("ERROR 1: %s\n",strerror(errno));
char *execArgs[] = { "cpdir", "-R", copy_path,paste_path, NULL };
printf("Copy from %s to %s\n",copy_path,paste_path);
if(pid == 0) {
printf("I'm gonna exec\n");
execvp("cpdir", execArgs);
printf("I should never get here \n");
}
else {
printf("I'm the father, going to return\n");
printf("ERROR 2: %s\n",strerror(errno));
return;
}
}
输出
Dec 26 20:34:11 192 kernel: I'm in execCopy
Dec 26 20:34:11 192 kernel: ERROR 0: Not a directory
Dec 26 20:34:11 192 kernel: ERROR 1: Not a directory
Dec 26 20:34:11 192 kernel: Copy from /./home to /./home/lcom
Dec 26 20:34:11 192 kernel: I'm the father, going to return
Dec 26 20:34:11 192 kernel: ERROR 2: Not a directory
答案 0 :(得分:2)
输出缓冲可能会吞噬子进程输出。在exec之前尝试fflush(stdout)
。
编辑:在fork之后,你应该看到两行ERROR 1和两行。您没有看到任何子进程输出。