我正在编写一个C程序,我需要在代码中间复制一些目录。所以我写了这个函数,我尝试使用 fork 然后使用 execvp。但是,此代码似乎没有输入pid==0,并且也不小于0。可能出了什么问题?如果这很重要,我正在使用minix
void execCopy() {
printf("I'm in execCopyn");
printf("ERROR 0: %sn",strerror(errno));
int pid = fork();
if(pid < 0) {
printf ("fork failed with error code= %dn", pid);
fprintf(stderr,"FORK errorn");
}
printf("ERROR 1: %sn",strerror(errno));
char *execArgs[] = { "cpdir", "-R", copy_path,paste_path, NULL };
printf("Copy from %s to %sn",copy_path,paste_path);
if(pid == 0) {
printf("I'm gonna execn");
execvp("cpdir", execArgs);
printf("I should never get here n");
}
else {
printf("I'm the father, going to returnn");
printf("ERROR 2: %sn",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
输出
缓冲可能会吞噬子进程输出。 尝试在执行官面前fflush(stdout)
。
编辑:分叉后,您应该看到两个错误 1 和两个从行复制。 你看不到任何子进程输出。