在Linux上调用带有时间偏移的程序

时间:2010-10-15 13:29:25

标签: linux datetime

我想在Linux上调用具有相对时间偏移(或者,具有绝对时间值)的程序或脚本。可以将其视为设置系统日期和时间,但不是全局的系统,而是本地的脚本/程序及其所有子进程。这可能吗?

1 个答案:

答案 0 :(得分:2)

您可以围绕C运行时库(glibc)调用创建一个包装器,并使用LD_PRELOAD将其传递给您的脚本(有关详细信息,请参阅this question)。

你没有太多的功能要覆盖glibc中的LSB specifies only 16 time-related函数。包装器的实现可以使用环境变量的值来调整偏斜。这个电话会是这样的:

LD_PRELOAD=libtime.so TIME_SHIFT=+10 my_program

实现看起来像这样(伪代码):

struct tm *localtime(const time_t *timep)
{
  //use dlopen() call to get the actual glibc
  //use dlsym() to find the real localtime() function
  //call this localtime function
  //adjust the time in the struct tm* returned by TIME_SHIFT value
  //return it to the calling program
}

感谢 Konstantin Vlasov 提示。但当然这个想法并不新颖。 This StackOverflow answer Hasturkun列出了几个以这种方式工作的库。