例如,我有一个测试C程序,可以打印所有环境变量:
#include <stdio.h>
#include <stdlib.h>
extern char **environ;
int main(void) {
char **env = environ;
while (*env) {
printf("%sn", *env);
env++;
}
return EXIT_SUCCESS;
}
GitHub 上游
但是当我在 se.py 系统调用仿真中运行它时,它不会打印任何内容,所以我猜测 gem5 默认在系统调用仿真中设置了一个空环境,而不是继承主机的环境。
在 gem5 872cb227fdc0b4d60acc7840889d567a6936b6e1 上测试。
通过快速se.py --help | grep -i env
我们看到:
-e ENV, --env=ENV Initialize workload environment from text file.
因此,以下内容按预期工作:
printf 'a=bnc=dn' > env.sh
se.py -e env.sh
并且测试程序打印:
a=b
c=d
尝试使用 Bash 的<()
表示法不起作用,但是,gem5 确实需要将其放置在常规文件中,尝试失败并显示:
IOError: [Errno 2] No such file or directory: '/dev/fd/63'