Изменить текущий рабочий каталог в дочернем процессе в C
Я должен написать программу, которая генерирует дочерний процесс, а затем завершает родительский процесс, и после этого этот созданный дочерний процесс должен попросить пользователя ввести новый рабочий каталог, изменить его и распечатать путь к его новому рабочему каталогу. Я написал это, но 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 ответ
Решение
У тебя две ошибки,
- Использование
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);
}
}