2016-02-24 4 views
0

MyCode:ChDir() возвращает 0, но отладка в следующей строке после ChDir() вызова показывает, что каталог не изменилось

int ushExCd(Cmd cmd){ // BuiltIn shell command implementation 
     char * home = "HOME"; 
     int returnVal = 1; 
     if(cmd->nargs > 1){ // target directory is specified in args[1] 
      returnVal = chdir(cmd->args[1]); 
     }else{ // target directory is not specified, use "HOME" instead 
      returnVal = chdir(getenv(home)); 
     } 
     if(-1 == returnVal){ 
      perror("cd"); 
     } 
     return 1; 
    } 

Использования LLVM отладчика для проверки returnVal сразу после его назначения показывает, что его значение равно 0 (хотя его инициализировано до 1), но делает p (char*)getenv("PWD") в отладчике сразу же после того, как системный вызов chdir() показывает, что каталог не изменился.

Я использовал Xcode, но затем я попробовал использовать оболочку bash и tcsh с использованием компиляторов gcc без использования.

Что еще интереснее, тот же фрагмент кода успешно выполняется на оболочке, которую реализовал другой человек, что может указывать на неправильную реализацию оболочки, но затем я отлаживаю прямо внутри этого фрагмента кода, и не должно быть никакого способа chdir() теряется в более поздний момент времени.

+0

ОК, понял! –

ответ

1

Я думаю, что getenv("PWD") предоставит вам текущий каталог при запуске вашей программы.

Чтобы узнать текущий каталог, используйте getcwd().

+0

Да, это правильно. Спасибо! –

Смежные вопросы