【问题标题】:Change current directory for child process started with execve()更改以 execve() 开始的子进程的当前目录
【发布时间】:2020-11-09 23:17:27
【问题描述】:

我想用execve() 更改子进程的环境变量,这样如果子进程打开当前目录中的文件,它就会链接到另一个目录。我必须更改什么环境变量才能完成此任务? $PWD 不工作。

例如:

char *args[] = { .... };
char *env[] = { "PWD=/home/anydirectory_I_Wish", NULL };
execve( mycode, args, env);

【问题讨论】:

  • 可以使用chdir()改变当前工作目录
  • PWD 只是一个环境变量,只有一个命令可以改变当前目录
  • 子进程在哪里? execve 不会创建新进程,除非您没有显示 fork,否则没有子进程。
  • 对不起,我的意思是“被另一个进程占用”

标签: c linux environment-variables


【解决方案1】:

没有环境变量可以做到这一点。

相对路径名(如 foobar/foo)传递给系统调用(如 open(2)总是相对于当前工作目录解析(cwd )。 cwd 是进程的一个属性,只能通过系统调用chdirfchdir 进行更改(可能还有一些我遗漏的其他模糊方式)。但是PWD 和任何其他环境变量都没有用于解析相对路径名。

设置环境变量PWD等于cwd名称的想法是shell的一个特性,方便脚本访问。其他程序不一定需要以任何特殊方式处理PWD,或者在cwd 更改时对其进行更新。特别是,操作系统不保证PWD 将被设置为任意程序中的 cwd 的名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 2014-11-14
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    相关资源
    最近更新 更多