Вызов программы со смещением времени в Linux - PullRequest
2 голосов
/ 15 октября 2010

Я хотел бы вызвать программу или скрипт с относительным смещением времени (или, альтернативно, с абсолютным значением времени) в Linux.Думайте об этом как об установке системной даты и времени, за исключением не глобально для системы, а локально для скрипта / программы и всех ее дочерних процессов.Это возможно?

1 Ответ

2 голосов
/ 15 октября 2010

Вы можете создать оболочку для вызовов библиотеки времени выполнения C (glibc) и передать ее в свой скрипт с помощью LD_PRELOAD (см. этот вопрос для получения дополнительной информации).

Существует не так много функций, которые вы должны переопределить, LSB определяет только 16 связанных со временем функций в glibc. Реализация ваших оболочек может использовать значение переменной окружения для настройки перекоса. Тогда вызов будет выглядеть так:

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
}

Спасибо Константину Власову за подсказку. Но, конечно, идея не нова. Этот ответ StackOverflow от Hasturkun перечисляет несколько библиотек, которые работают таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...