Когда я использую chdir() для изменения текущего рабочего каталога, почему getenv («PWD») не дает текущий рабочий каталог? Нужно ли мне также setenv («PWD», newDir, 1)?chdir() не влияет на переменную окружения PWD
void intChangeDir(char *newDir)
{
if(chdir(newDir)==0)
{
printf("Directory changed. The present working directory is \"%s\" \"%s\"\n",getenv("PWD"),getcwd(NULL,0));
}
else
{
printf("Error changing dir %s\n",strerror(errno));
}
}
Выход: (расположение исполняемого файла/главная/пользователя)
changedir/ботинок изменился
Справочник. Настоящий рабочий каталог «/ home/user» «/ boot»
Так что же означает PWD в этом смысле? Настоящий рабочий каталог уже изменился. – 2010-09-04 11:35:48
PWD - это рабочий каталог в оболочке. Программа C имеет другой рабочий каталог - она начинается с той же самой, что и вызывающая оболочка, а затем chdir меняет рабочий каталог программы C, который не может повлиять на каталог оболочки. – Mark
@crypto: переменные окружения не являются волшебными. Они изменяются только тогда, когда приложение явно меняет их, поэтому, если ваше приложение никогда не изменяет 'PWD', тогда значение' PWD' является «текущим каталогом при запуске приложения». – caf