gpt4 book ai didi

在 C 中更改子进程中的当前工作目录

转载 作者:太空宇宙 更新时间:2023-11-04 02:26:25 26 4
gpt4 key购买 nike

我必须编写一个程序来生成子进程而不是结束父进程,然后创建的子进程必须要求用户输入新的工作目录,更改它并打印到其新工作目录的路径。我写了这个,但是 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;
}

感谢您花费时间、精力和所有帮助来理解 :)

最佳答案

你有两个错误,

  • 使用scanf()
  • 不等待 child 完成其作为 parent 的任务。

以下作品。

#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);
}
}

关于在 C 中更改子进程中的当前工作目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50467915/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com