【发布时间】:2014-12-26 19:13:03
【问题描述】:
我正在编写一个 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
【问题讨论】:
-
为什么你调用 strerror(errno) 却不改变 errno 的值
-
当您进入时,
errno已经设置为ENOTDIR,这从一开始就不是好兆头。 -
你试过
printf("PID: %d\n", pid);吗?特别注意\n的使用,它输出刚刚组装的行。因此将导致更好的可读输出和在没有fflush()的情况下输出。 -
@WhozCraig 我知道,但老实说我不知道这是从哪里来的。但是它可能与这个问题特别有关吗?感谢您的帮助
-
@glglgl 嗨,pid 是 756,我再一次看不到孩子的任何输出。感谢您的帮助