Как изменить текущий каталог на назначенный каталог с помощью chdir () в c? - PullRequest
0 голосов
/ 25 апреля 2020

РЕДАКТИРОВАТЬ

Существующий каталог не обязательно является подкаталогом домашнего каталога. Это может быть подкаталог подкаталога домашнего каталога.

Конец EDIT

Я читаю пользовательский ввод (например, cd existedDirectory) изменить текущий каталог на «existedDirectory». Я знаю, что

chdir(getenv("HOME"));

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

chdir(getenv("/existedDirectory"));
chdir(getenv("existedDirectory"));
chdir(getenv("~/existedDirectory"));
chdir("/existedDirectory");
chdir("existedDirectory");
chdir("~/existedDirectory");

Ничего не помогло. Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

3 голосов
/ 25 апреля 2020

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

chdir("/existingDirectory");

, которые изменяются на и существующий каталог в каталоге root - он имеет абсолютный путь. Так что это должен быть один из каталогов, которые вы видите при запуске ls /.

chdir("exisitingDirectory");

изменится на существующий подкаталог текущего директора.

Если вы хотите изменить на подкаталог вашего домашнего каталога, вам нужно что-то вроде:

char path[PATH_MAX];
sprintf(path, "%s/%s", getenv("HOME"), "subdir");
chdir(path);
2 голосов
/ 25 апреля 2020

chdir() в C влияет только на процесс, который его вызывает. Ваша оболочка и ваша программа - это два разных процесса, которые запускаются отдельно. Таким образом, переменная среды $ PWD, которая указывает рабочий каталог, будет изменена только для вашего приложения. Проверьте этот ресурс тоже.

Примечание: chdir() не меняет рабочий каталог текущей оболочки. Потому что когда программа выполняется в оболочке, оболочка следует за форком по механизму exe c. Таким образом, это не влияет на текущую оболочку.

...