我正在使用运行一个二进制文件,例如。'ls -la' 在我的 c 代码中使用execl()函数并读取子进程的返回状态。execl("/bin/ls", "ls", "-la", NULL); 并通过waitpid(pid, &status, 0 )接收子状态;功能。但我需要把我的输出放在不同的时区,比如TZ=UTC。所以喜欢使用 'ls -la' 作为 'TZ=UTC ls -la'。那么是否可以使用 execl() 函数传递时区参数。或者有什么方法可以在特定时区获得输出。找c代码。
对于这种简单的情况,最简单的解决方案是在调用之前使用setenv
修改环境变量的值 。(大概你在调用;之前应该在唯一的子进程中调用,这样它就不会修改父的环境。)TZ
execl
fork()
execl
setenv
fork()
您可以创建一个完整的环境列表,然后将其传递给execle
. 但这是很多工作却收效甚微。如果您正在调用 setuid 可执行文件,或者您想要添加大量环境变量,或者您的 C 库没有setenv
. 但在正常情况下,单次setenv
调用就可以了。