На самом деле, нет проблем в коде, который вы представили.Я протестировал его с помощью следующей базовой программы:
#include <stdio.h>
#include <time.h>
int main(void)
{
printf("%ld\n", (long) time(NULL));
}
Поэтому я просто запускаю LD_PRELOAD=./newtime.so ./test
и получаю ожидаемый результат.
Однако команда date
не выполняет вызовк функции time
.Вместо этого он вызывает int clock_gettime(clockid_t clk_id, struct timespec *tp)
.Так что вам лучше повторно реализовать их оба, если вы хотите охватить этот случай.
Может быть простая реализация, подобная следующей (она прекрасно работает с date
):
int clock_gettime(clockid_t clk_id, struct timespec *tp)
{
if(tp) {
tp->tv_sec = 1485907200;
tp->tv_nsec = 0;
}
return 0;
}
Если вы получаете дату, отличную от ожидаемой, она может быть связана с вашим часовым поясом.