我如何知道两个不同上下文中进程的“执行环境”的区别?
为了正确表达这个问题,我安装了plan9port /opt/plan9/
,当我从中运行财富程序时,/opt/plan9/bin/fortune
它工作正常。/opt/plan9/lib/fortune
(从和读取财富列表/opt/plan9/lib/fortune.index
)。当我从 ac 代码 (test.c) 内部调用它时
char* opts[] = {"fortune"};
execve("/opt/plan9/bin/fortune", opts, NULL);
它不读取财富清单。当我调用这两个二进制文件时,我使用 strace 来查看有什么区别。
strace -f -eopen ./test
open("/usr/local/plan9/lib/fortunes", O_RDONLY) = -1 ENOENT (No such file or directory)
Misfortune!
+++ exited with 1 +++
发出默认消息“不幸”。
strace -f -eopen fortune
open("/opt/plan9/lib/fortunes", O_RDONLY) = 3
Snob intellectual bachelors can't have fun in San Antonio. -Ted Nelson
+++ exited with 0 +++
效果很好。
如何更改 ./test 读取财富文件。它必须与 exec 环境有关,二进制文件从中读取库。