如何在 execl() 函数中更改时区(TZ=UTC)输出。

Posted

技术标签:

【中文标题】如何在 execl() 函数中更改时区(TZ=UTC)输出。【英文标题】:How to change time zone(TZ=UTC) output in execl() function. 【发布时间】:2018-05-29 18:03:56 【问题描述】:

我正在使用运行一个二进制文件,例如。 'ls -la' 在我的 c 代码中使用 execl() 函数并读取子进程的返回状态。 execl("/bin/ls", "ls", "-la", NULL); 并通过 waitpid(pid, &status, 0 ); 函数接收子状态.但我需要将我的输出放在不同的时区,例如 TZ=UTC。 所以喜欢使用 'ls -la' 作为 'TZ=UTC ls -la'。那么是否可以使用 execl() 函数传递时区参数。或者有什么方法可以在特定时区获得输出。 找c代码。

【问题讨论】:

"正在寻找 c 代码。"很好,因为标签是 C,但您没有发布您尝试过的内容,而是描述了它。更好、更清楚地发布您尝试过的可编译代码。它为您正在尝试的细节增加了价值。 使用execle 并提供一个将TZ 设置为UTC 的环境。 【参考方案1】:

对于这种简单的情况,最简单的解决方案是在调用execl 之前使用setenv 修改TZ 环境变量的值。 (想必你fork()在调用execl之前;setenv应该只在子进程中在fork()之后调用,这样就不会修改父环境。)

您可以创建一个完整的环境列表,然后将其传递给execle。但这是很多工作却收效甚微。如果您正在调用 setuid 可执行文件,或者您想要添加大量环境变量,或者您的 C 库没有setenv,您可能想要这样做。但在正常情况下,单个setenv 调用就可以了。

【讨论】:

以上是关于如何在 execl() 函数中更改时区(TZ=UTC)输出。的主要内容,如果未能解决你的问题,请参考以下文章

更改时区phpmyadmin?

如何从 UTC 转换为 tzutc() 时区?

linux下如何修改时区(TIMEZONE)

Linux系统时区更改步骤

如何在 oracle 触发器中转换日期类型变量的时区

Linux之CentOS 6 时区更改