Как использовать execv() с командой cd в Linux?

Где находится путь к командному файлу cd и в какой переменной среды?! я использую переменную окружения PATH, но я не нахожу в ней команду cd, поэтому я хочу выполнить команду cd в execv, заранее спасибо, мой код:

char * envVariable = get env("PATH");
execv(path, args);

person Mohamed Seif    schedule 31.10.2014    source источник
comment
выполнение cd бессмысленно. вы запускаете оболочку, меняете директорию в оболочке, выходите из оболочки - оставляя все остальное точно так же, как и раньше.   -  person Marc B    schedule 31.10.2014
comment
Это требуется в моем лабораторном задании по ОС ... я не знаю, как это сделать !!   -  person Mohamed Seif    schedule 31.10.2014
comment
cd — это встроенная оболочка, а не команда. Вы можете использовать chdir() для смены каталога.   -  person P.P    schedule 31.10.2014
comment
Если вы хотите выполнить команду, вам нужно разветвиться до ! Если вы хотите увидеть перекодированный исполнитель команд: github.com/charvoa/42 / быть жестко закодированы!   -  person Nicolas Charvoz    schedule 31.10.2014
comment
Текущий каталог связан с текущим процессом, но не является переменной среды. Некоторые оболочки устанавливают $PWD в текущий каталог, но это всего лишь соглашение; нет никакой гарантии, что $PWD будет по-прежнему соответствовать текущему каталогу, а chdir() не будет касаться какой-либо переменной среды.   -  person Keith Thompson    schedule 31.10.2014


Ответы (1)


Если вы пишете оболочку или что-то подобное, вам требуется, чтобы cd была встроенной, вызывающей chdir(2) системный вызов.

Это требуется при изменении любого свойства, которое является частным для процессов. Текущий каталог является таким свойством (как и ограничения, установленные setrlimit(2). ) и т. д.)

Это объясняет, почему вы не можете сделать system("cd /tmp");, функция system разветвляет процесс /bin/sh -c, и эта оболочка меняет каталог, а не родительский процесс (ваша программа).

Прочтите fork(2), execve(2) и Продвинутое программирование для Linux

person Basile Starynkevitch    schedule 31.10.2014
comment
Затем я остановлю ввод команды и буду искать аргумент команды (необходимый каталог) в текущем пути... и т.д. - person Mohamed Seif; 31.10.2014
comment
Если под текущим путем вы подразумеваете текущее значение $PATH, это не имеет значения. Команда cd в своей обычной форме передает свой аргумент в chdir() (хотя она может распознавать некоторые особые случаи, такие как cd - для перехода в предыдущий каталог). - person Keith Thompson; 31.10.2014