chdir() возвращает 0, но отладка в следующей строке после вызова chdir() показывает, что каталог не изменился
MyCode:
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()
теряется в более поздний момент времени.
1 ответ
Я думаю, что getenv("PWD")
даст вам текущий каталог, когда ваша программа была запущена.
Чтобы узнать текущий каталог, используйте getcwd()
,