코드 중간에 복사 할 디렉토리가 필요한 C 프로그램을 작성하고 있습니다. 그래서 나는 fork와 execvp를 사용하려고하는이 함수를 썼다. 그러나이 코드는 pid == 0을 입력하는 것으로 보이지 않으며 0보다 작지 않습니다. 무엇이 잘못 될 수 있습니까? 그포크에서 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;
}
}
OUTPUT
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
errno의 값을 변경하지 않고 strerror (errno)를 호출하는 이유 – sas
* 입력 *하자마자'errno'는 이미 'ENOTDIR'로 설정되어 있습니다. – WhozCraig
'printf ("PID : % d \ n", pid);'시도한 적이 있습니까? 특히 방금 조립 된 줄을 출력하는'\ n'의 사용에주의하십시오. 따라서'fflush()'없이 출력 할 수있는 출력 * 및 *를 더 잘 읽을 수 있습니다. – glglgl