2015-01-14 7 views
-4

나는 내 자신의 쉘을 C로 작성하려고 시도했다. chdir() 함수에 문제가있다. 때로는 execvp: No such file or Directory이라는 오류 메시지와 일부 다른 오류 메시지가 있습니다. 디렉토리는 항상 동일합니다. 존재하는 목적지에 도달하려고합니다.내 자신의 쉘 만들기 - C - chdir()

if(strcmp(str,"exit\n")!=0){ 

    history_vector[i]=strdup(str); 

    if(strcmp(str,"cd\n")==0){ 
     char *dir = strtok(str," "); 
     dir = strtok(NULL," "); 
     if(chdir(dir) == -1) { 
      perror("Cannot change directory"); 
     } 
     else { 
      printf("Changing Directory .....\n"); 
     } 
    } 
+1

'chdir'을 호출하기 전에 포인터에 무엇이 들어 있는지 확인 했습니까? –

+6

프로그램 디버깅을 시도 했습니까? 'str'의 값은 무엇입니까? 'dir'의 가치는 무엇입니까? 어떤 오류가 발생합니까? –

+2

아,'cd'가 인수를 가지고 있다면 비교할 입력 문자열은 ***이 아닌''cd \ n "'입니다. 방금 디버거를 사용하거나'str'의 내용을 출력했다면 아주 빨리 발견해야 할 것이 있습니다. –

답변

2

인수가있을 것으로 예상되는 문자열 비교는 절대로 성공하지 못합니다.

strcmp()과 함께 사용하는 문자열 "cd\n"에는 인수가 없으므로 str이 길면 일치하지 않습니다.

+1

여기서 무슨 일이 벌어지고 있는지 이해할 수 없다면 복잡한 셸 응용 프로그램을 작성하는 것이 기술 향상까지 다소 지연 될 수 있습니다. 문자열에 추가 단어가 있거나 문자가 없습니다. 다른 가능성은 없습니다. 이것은 큰 수수께끼가 아닙니다. 그렇지 않다면 여기서 추출 할 단어가 없습니다. 그렇다면 strcmp()가 잘못되었습니다. –

2

당신은 당신이 ... 경우 내부 이동 공백을 무시하는 가지고 .. 3 라인에서

if(strncmp(str,"cd\n",2)==0) 

을 시도 할 수 있습니다!