c - 更改以 execve() 开始的子进程的当前目录
问题描述
我想更改子进程的环境变量,execve()
以便如果子进程在当前目录中打开一个文件,它会链接到另一个目录。我必须更改什么环境变量才能完成此任务?$PWD
不管用。
例如:
char *args[] = { .... };
char *env[] = { "PWD=/home/anydirectory_I_Wish", NULL };
execve( mycode, args, env);
解决方案
没有环境变量可以做到这一点。
类似foo
或bar/foo
传递给系统调用的open(2)
相对路径名总是相对于当前工作目录(cwd) 进行解析。cwd 是进程的一个属性,只能通过系统调用chdir
或fchdir
(可能还有一些我遗漏的其他模糊方式)来更改。但PWD
在解析相对路径名时,既不使用也不使用任何其他环境变量。
将环境变量设置PWD
为与 cwd 的名称相同的想法是 shell 的一个特性,以方便脚本访问它。其他程序不一定需要以PWD
任何特殊方式处理,或者在 cwd 更改时对其进行更新。特别是,操作系统不保证PWD
将在任何任意程序中设置为 cwd 的名称。
推荐阅读
- java - java.time.LocalDate 和 Jython datetime.date
- bash - 作曲家错误/bin/sh:错误的解释器:没有这样的文件或目录
- java - 雅虎财经 URL 不起作用(自 2018 年 5 月起再次)
- c++ - 如何在源文件中定义模板函数
- javascript - 使用 javascript 从文件夹中获取图片到我的网站
- python - 定义引脚时的 InvalidPinDefError
- java - 如何在 Activity 或其他 viewPager 中更新 ViewPager 上的列表视图
- boost - 为 Windows 提升 asio
- css - 如何使包裹文本的第二行出现在第一行的正下方,如图所示:
- javascript - 在 Meteor Web 应用程序中启用对讲推送通知