Использование команды cd с fork в c
Можно ли менять каталоги с помощью команды fork? Не вдаваясь слишком много в мой код, у меня есть следующее:
childpid = fork();
if (childpid >= 0)
{
if (childpid == 0)
{
ret = execvp(argv[0],argv);
exit(ret);
} else {
waitpid(childpid,&status,0);
ret = WEXITSTATUS(status);
}
}
Выше работает нормально, когда я ввожу основные команды, такие как ls
, pwd
и т. д. Можно ли реализовать способ использования функции CD? Я могу набрать команду cd ..
но это ничего не делает.
Например, если моя программа находится в /Users/username/Desktop/
Я хотел бы использовать такие команды, как cd ..
идти в /Users/username/
или быть в состоянии пойти прямо в /Users
Я видел кое-что о chdir
но я не уверен, как именно это работает / как его использовать.
1 ответ
Как вы упомянули chdir
это лучший способ изменить рабочий каталог текущего процесса, команда оболочки cd
изменил бы только рабочий каталог процесса, выполняющего команду (а не родительский процесс), как fork
создаст новый процесс.
для использования chdir вы можете попробовать:
#include <stdio.h>
#include <unistd.h>
int main() {
char cwd[4096];
fputs(getcwd(cwd,4096),stdout); // will print the current working directory
fputs("\n",stdout);
chdir("/"); // change directory
fputs(getcwd(cwd,4096),stdout); // print new working directory
fputs("\n",stdout);
}