chdir系统调用不会改变我当前的工作目录
我正在用C 实现一个小型Shell,学校项目要求的内置命令之一是 cd。为此,我使用 chdir 来理解一些关于目录移动的基础操作。
我读过关于 cd 的man手册,并且明白要完成的不只是调用 chdir,还需要更多步骤。我需要更新 PWD 和 OLDPWD 环境变量,并且要处理大量边缘情况,但现在我还遇到一个更根本的问题。
当我在其中一个现有目录上调用它时,chdir 的退出码确实是0(正如它的手册所说,表示执行成功),但终端中的工作目录并未改变。
我到底错过了什么?
我看到了两个可能的问题:
- 我还没有正确实现
chdir - 我确实实现了,但需要把它放到循环中执行。
下面是main:
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
typedef enum s_err
{
BUILTIN_SUCCESS = 0,
SUCCESS = 0,
BUILTIN_ERROR = 1,
ERROR = 1
} t_error;
int main(int argc, char **argv, char **envp)
{
int exit_status;
argv++;
envp++;
if (argc == 0)
return (BUILTIN_ERROR);
exit_status = chdir("../Libft");
if (exit_status == -1)
perror("chdir");
return (0);
}
实现其他系统调用并不能解决问题,作业要求我让 chdir 在这个场景中工作。
解决方案
如果你更仔细地阅读 man页面,你会看到它还写着:
chdir() 函数只会影响当前进程的工作目录。
所以,你的程序只是在更新它自己的PWD。每个进程都有自己的环境变量,因此启动你程序的进程的PWD不会受到影响。这就是为什么在你的程序退出后,你在系统终端中看不到新的PWD生效的原因。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。