Как изменить каталог с помощью команды exec из программы C? - PullRequest
1 голос
/ 24 сентября 2010

Мне нужно изменить рабочий каталог из моей программы на Си.Для этого я использовал следующую команду: execl("/bin/cd","cd","..",(char*)0); но эта команда не меняет каталог?Что-то не так в этой команде или есть другой способ изменить рабочий каталог из программы на C?

Ответы [ 3 ]

10 голосов
/ 24 сентября 2010

Чтобы изменить текущий каталог, вы должны использовать chdir:

int chdir(const char *path);

В случае успеха возвращается 0.

Вы не можете использовать execl для несколькихпричины:

  1. cd обычно является встроенной командой оболочки;
  2. в большинстве систем /bin/cd не существует;в очень немногих системах, в которых он есть, он изменяет текущий каталог и затем порождает дочерний процесс оболочки;
  3. текущий каталог является свойством процесса: если вы изменяете текущий каталог с помощью /bin/cd, выпотеряет изменение каталога, как только процесс завершится;
  4. если вы используете функцию из семейства exec, текущий образ процесса будет заменен новым образом процесса - вы можете использовать system,но не решит предыдущие 3 проблемы.
2 голосов
/ 24 сентября 2010

То, что вы делаете, не сработает, потому что семейство вызовов exec фактически заменит вашу текущую программу в текущем процессе. Другими словами, вы будете прерваны, так что, когда cd будет завершен, ваш родительский процесс снова вступит во владение.

Если вы хотите изменить рабочий каталог для текущего процесса, используйте chdir. Если вы хотите изменить его при выходе, вам не повезло, потому что ваша программа работает в отдельном процессе от родительского, который ее запустил.

Итак, если у вас нет какой-либо формы общения с родителем, это не сработает.

1 голос
/ 24 сентября 2010

Вам необходимо использовать системный вызов chdir, чтобы изменить рабочий каталог вызывающего процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...