2014-10-31 2 views
0

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

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

выполнения 'cd' бессмысленно. вы стреляете в оболочку, меняете директорию в оболочке, выходите из оболочки - оставляете все остальное точно так, как было раньше. –

+0

Это необходимо в моем назначении лаборатории ОС ... Я не знаю, как! –

+4

'cd' является встроенной оболочкой и является * не * командой. Вы можете использовать 'chdir()' для изменения каталога. –

ответ

0

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

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

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

Читать fork(2), execve(2) и Advanced Linux Programming

+0

Затем я остановлю ввод команды и должен искать аргумент команды (каталог нужен) в текущем пути ... и т. Д. –

+0

Если по «текущему пути» вы имеете в виду текущее значение '$ PATH', это не имеет значения. Команда 'cd' в своей обычной форме передает свой аргумент' chdir() '(хотя он может распознать некоторые специальные случаи, такие как' cd -', чтобы перейти к предыдущему каталогу). –