Использование команды 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);
}
Другие вопросы по тегам