2016-02-16 2 views
0

Я работаю над проектом и сталкиваюсь с небольшой проблемой. Он разработан как простая оболочка, и прямо сейчас я работаю над вводом встроенных команд (pwd, cd, exit). У меня есть все, кроме компакт-диска.chdir в пользовательской оболочке в Unix

разбора работа, и различные сегменты команды и аргументов помещаются в массив, так что теперь у меня есть это:

void cd() 
{ 
    chdir(commands[1].c_str()); 

    reset(); 
} 

Я бег, что с правильным путем, который находится в этой директории , но он не меняется. Что мне не хватает?

Спасибо!

+1

Если он не работает, проверьте статус возврата 'chdir' и' errno', который скажет вам, что не так. У вас есть разрешения на выполнение в каталоге, к которому вы работаете cd'ing? –

+0

@MichaelAlbers Просто попробовал это, добавил заголовок errno.h и добавил cout для него в этой же функции, ничего не получилось, так что не выглядело так, что я получаю какие-либо ошибки где угодно. И никаких предупреждений о компиляции, что все отлично работает – timgregoire

+1

Что значит «ничего не получилось»? По определению chdir возвращает int. Вы имеете в виду, что он вернулся ноль? Откуда вы знаете, что каталог не меняется? –

ответ

3

Вы comment:

Можно сказать, каталог не изменяется, потому что сразу же после того, как, когда я бегу PWD (getenv("PWD")), он по-прежнему показывает исходный каталог, в котором была запущена программа в

.

Неверная проверка текущего рабочего каталога. См. chdir() not affecting environment variable PWD

Вместо использования getenv("PWD")getcwd.

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