Jim*_*ron 0 c linux environment-variables
我想更改子进程的环境变量,execve()以便如果子进程打开当前目录中的文件,它将链接到另一个目录。我必须更改什么环境变量才能完成此任务?$PWD不管用。
例如:
char *args[] = { .... };
char *env[] = { "PWD=/home/anydirectory_I_Wish", NULL };
execve( mycode, args, env);
Run Code Online (Sandbox Code Playgroud)
没有环境变量可以完成此操作。
相对路径名(如foo或bar/foo传递给系统调用的相对路径名)始终open(2)相对于当前工作目录(cwd) 进行解析。cwd 是进程的一个属性,只能通过系统调用或(也许还有我缺少的其他一些晦涩的方式)来更改。但在解析相对路径名时不使用任何其他环境变量。chdirfchdirPWD
将环境变量设置为等于 cwd 名称的想法PWD是 shell 的一个功能,以便于脚本访问它。其他程序不一定需要以PWD任何特殊方式处理,或者在cwd改变时更新它。特别是,操作系统不保证PWD将在任何任意程序中设置为 cwd 的名称。