我正在使用运行一个二进制文件,例如。 ' ls -la'在我的c代码中使用 execl()函数并读取子进程的返回状态。 execl(" / bin / ls"," ls"," -la",NULL); 并通过 waitpid(pid,& status,0); 功能。但是我需要把我的时间放在不同的时区,比如 TZ = UTC 。 所以喜欢使用' ls -la' as' TZ = UTC ls -la'。因此可以通过execl()函数传递时区参数。或者有没有办法在特定时区获得输出。 寻找c代码。
答案 0 :(得分:1)
对于这个简单的情况,最简单的解决方案是在调用TZ
之前使用setenv
修改execl
环境变量的值。 (可能是在fork()
致电之前execl
; setenv
应仅在子流程中fork()
之后调用,因此它不会修改父母的环境。)
您可以创建整个环境列表,然后将其传递给execle
。但是,这很多工作几乎没什么好处。如果您正在调用setuid可执行文件,或者您想要添加许多环境变量,或者您的C库没有setenv
,则可能需要这样做。但在正常情况下,单setenv
次呼叫就可以了。