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() не должно потеряться. в более поздний момент времени.


person Arjun Augustine    schedule 24.02.2016    source источник


Ответы (1)


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

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

person Mathieu    schedule 24.02.2016
comment
Да, это правильно. Спасибо! - person Arjun Augustine; 24.02.2016