【发布时间】:2014-07-08 02:41:21
【问题描述】:
假设我们有 program1:
int main(void) {
char *env[2];
env[0] = "PATH=/";
env[1] = NULL;
execve("/program2", NULL, env);
exit(0);
}
我们还有program2:
int main(void) {
exit(0);
}
对此进行调试,PATH 实际上并没有在执行的新进程(program2)中被修改。
【问题讨论】:
-
除了您没有遵循警告,您不应将
NULL作为第二个参数传递给exec*()系列的函数,而是一个NULL终止的指向@ 的数组987654327@(就像env),代码没问题,在这里工作。 -
您知道
execve()是否有效吗?你的第一个程序最后应该有return(1);或exit(1);,并在execve()返回时打印一个诊断信息(如果它返回,你就知道它失败了)。你会不会做得更好/usr/bin/env这样你才能看到新进程的环境? -
execve() 绝对有效。我不完全确定 env 在这里为我做了什么(或如何在 C 中使用它),但请注意我无权访问第二个程序。
-
在 program1 中,您的代码尝试执行 program2,它应该位于文件系统树的根目录 (
"/program2"在您的代码中)。你为什么要把那个程序放在那里?您是否希望 program1 像您一样通过更新PATH环境变量来认为 program2 存在?
标签: c path environment-variables