현재이 오류로 고민하고 있습니다. execvp();를 사용하여 명령을 실행하기 위해 fork()를 사용하여 쉘 에뮬레이터를 작성했습니다. 인수가없는 ls를 제외하고 거의 모든 명령을 내 쉘로 구문 분석하려고합니다. 내가 LS의 -lah을 실행하려고하면 은, 모든 작동하지만, 간단한 LS는, 다음과 같은 오류가 발생하지 않습니다 (다만 필수)execvp - ls : fts_open : 해당 파일이나 디렉토리가 없습니다.
pid = fork();
if (pid==0)
{
puts("CHILD");
puts(args[0]);
puts(args[1]);
printf("%d\n", strlen(args[1]));
args[2] = NULL;
execvp(args[0], args);
}
else wait(NULL);
puts("BACK TO PARENT");
}
: 여기
ls: fts_open: No such file or directory
내 코드의 조각이다
이곳은 LS의 출력입니다 : 당신이 볼 수
이ls
CHILD
ls
0
ls: fts_open: No such file or directory
BACK TO PARENT
, 인수 [0] LS, 인수를 포함 [1], 비어 인수, 인수의 길이가 없습니다로 [1] 0이지만 오류가 계속 발생합니다.
어떤 아이디어 일 수 있습니까?
편집 : 그것을 찾기위한 조나단 레플러에 대한
명예 : (이 Mac에서 바로 문제처럼도 보인다)
점은 인수 [1] 정말 빈되지 않는 것입니다, 그래서 OS는 분명히 존재하지 않는 ''파일을 열려고 시도합니다. 실제로는 이름이 아니기 때문에 외형은 생성 될 수 없습니다.
그래서, 내가 한 일은 다음과 같습니다. args [1]의 len을 확인하십시오. 값이 0이면 NULL로 설정하십시오. 더 이상 인수가없는 경우
pid = fork();
if (pid==0)
{
puts("CHILD");
puts(args[0]);
puts(args[1]);
if (strlen(args[1]) == 0)
args[1] = 0;
args[2] = NULL;
execvp(args[0], args);
}
else wait(NULL);
puts("BACK TO PARENT");
}
'args' ('args [1]'에 무엇을 설정했는지, "empty"는 무엇입니까?)와 코드의 전체 정의를 보여줄 수 있습니까? –