gpt4 book ai didi

c - Linux C : Using fork() child to change directory

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:24:41 27 4
gpt4 key购买 nike

我正在制作一个命令 shell,我正在使用子命令更改 shell 的目录,但我无法用它来更改数组的内容;

最后它只是打印当前目录而不是“/”。 child 对 newDirectory 数组没有影响。我究竟做错了什么?有没有办法让 child 改变数组的内容?谢谢。

char newDirectory[255];

getcwd(newDirectory, 255); //set newDirectory to current directory

pid_t pid;

pid = fork();

if(pid == 0){ //child execution

strcpy(newDirectory, "/");

exit(0);
}

else if (pid < 0){
printf( "Error!\n");
exit(1);
}
else{
pid = waitpid(pid, NULL, 0);
}
printf("%s\n", newDirectory);
chdir(newDirectory);

最佳答案

(从评论中移出)

当您执行 fork() 时,新进程是父进程的独立副本1,因此无论您对变量进行何种更改父进程看不到子进程 - 它们有两个独立的虚拟地址空间。

如果您希望子进程与父进程通信,您必须使用一些 IPC 方法(例如管道、共享内存、套接字...)。


  1. 实际上,在现代系统中,地址空间复制实际上是通过写时复制实现的,但这并没有改变这一点。

关于c - Linux C : Using fork() child to change directory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15046025/

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