2015-01-14 3 views
-4

Я попытался написать свою собственную оболочку в C. У меня проблема с функцией chdir(). Иногда у меня есть сообщение об ошибке, которое говорит execvp: No such file or Directory, а некоторые другие ничего. Каталог всегда один и тот же. Я пытаюсь добраться до места назначения, которое существует.make my own shell - 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

Сравнение строк никогда не будет успешным, если вы ожидаете, что будет аргумент.

Строка "cd\n", которую вы используете с strcmp(), не содержит аргумента, поэтому она не будет соответствовать, если длина str больше.

+1

Если вы не можете понять, что здесь происходит, возможно, написать сложное приложение оболочки может быть чем-то, что вы хотите отложить, пока ваши навыки не улучшатся. Либо у вашей строки есть дополнительное слово, либо нет. Других возможностей нет. Это не большая загадка. Если это не так, у вас нет дополнительных слов для извлечения здесь. Если это так, ваш strcmp() ошибочен. –

2

вы можете попробовать

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

в 3-й строке .. как вы должны игнорировать пробелы .. идти внутрь, если !!