Изменить текущий рабочий каталог в дочернем процессе в C - PullRequest
0 голосов
/ 22 мая 2018

Мне нужно написать программу, которая генерирует дочерний процесс, а затем завершает родительский процесс, и после этого этот созданный дочерний процесс должен попросить пользователя ввести новый рабочий каталог, изменить его и распечатать путь к его новому рабочему каталогу.Я написал это, но scanf не работает («Он не просит пользователя что-то вводить, программа просто завершается) и путь не меняется ... Я пытался установить новый каталог на char *newdirectory="home/usr/desktop", и это не изменилось»рабочий каталог тоже

#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <sys/stat.h>

int main()
{
    int pid;
    char directory[1024];
    char newdirectory[1024];        
    pid=fork(); 
    if(pid<0)
    {
        printf("\n Error ");
        exit(1);
    }
    else if(pid==0)
    {
        printf("I'm child \n ");
        printf(" My PID: %d \n",getpid());
        getcwd(directory, sizeof(directory));
        printf(" My current working directory is: %s\n", directory);
        printf(" Enter the new path\n");
        scanf("%s", &newdirectory);
        chdir(newdirectory);
        getcwd(directory, sizeof(directory));
        printf(" Path changed to: %s\n", directory);
        exit(0);
    }
    else
    {
        printf("I'm a parent \n ");
        printf("My PID is %d \n ",getpid());
        printf("Bye bye \n");
        exit(1);
    }
    return 0;
}

Спасибо за ваше время, усилия и всю помощь, чтобы понять:)

1 Ответ

0 голосов
/ 22 мая 2018

У вас есть две ошибки,

  • Использование scanf()
  • Не дожидается, пока ребенок завершит свою задачу в качестве родителя.

Следующееработает.

#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <sys/stat.h>

int main()
{
    int pid;
    char directory[1024];
    char newdirectory[1024];
    pid=fork();
    if(pid<0)
    {
        printf("\n Error ");
        exit(1);
    }
    else if(pid==0)
    {
        printf("I'm child \n ");
        printf(" My PID: %d \n",getpid());
        getcwd(directory, sizeof(directory));
        printf(" My current working directory is: %s\n", directory);
        printf(" Enter the new path\n");
        scanf("%1023s", newdirectory);
        chdir(newdirectory);
        getcwd(directory, sizeof(directory));
        printf(" Path changed to: %s\n", directory);
        exit(0);
    }
    else
    {
        wait(0);
        printf("I'm a parent \n ");
        printf("My PID is %d \n ",getpid());
        printf("Bye bye \n");
        exit(1);
    }
}
...