我想在Linux上调用具有相对时间偏移(或者,具有绝对时间值)的程序或脚本。可以将其视为设置系统日期和时间,但不是全局的系统,而是本地的脚本/程序及其所有子进程。这可能吗?
答案 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列出了几个以这种方式工作的库。