На системах unix, libfaketime є де факто стандартне рішення цієї проблеми в програмному забезпеченні. Він виконує операцію man-in-the-middle між вашою програмою та часовою бібліотекою системи. Запити передаються в систему, але відповіді змінюються за потреби. Він також змінює результати stat()
виклики, тому час редагування файлів & amp; c. також змінені.
Налаштування виконуються з використанням змінних оточення, тому вам доведеться дізнатися про них, якщо ви ще не знайомі з їхніми роботами.
libfaketime підтримує відносні і абсолютні зміщення, зупинився і час роботи і прискорення або уповільнення. Проте я не знаю про те, що біг назад.
Зауважте, що поточна версія прикидається, що секунди є найвищою роздільною здатністю часу, і передає під-другий частину відповідей до програми без змін. Таким чином, якщо ви уповільнюєте час до половини швидкості, програма, яка дає змогу здійснювати дуже швидкі дзвінки під час секунди, переживатиме цілу секунду двічі один за одним, а не раз у два рази. Якщо годинник зупинено, це означає, що програма бачить випадковий час у вибраній секунді.
На жаль, сьогодні Github не працює, тому зараз документи недоступні, але це, швидше за все, буде виправлено найближчим часом.
Редагувати:
З Github резервне копіювання я спробував, і знайшов код для зміни швидкості, щоб бути загальним достатньо, що він добре працює з негативними значеннями або що-небудь ще прийнято atof()
.
Проте стало очевидним інше питання: для зміни швидкості, крім реального поточного часу і бажаного часового зсуву, необхідне походження часу. Це походження встановлюється незалежно для подпроцессов, так що (при роботі в зворотному напрямку при номінальній швидкості), коли батьківський процес відводиться на одну хвилину, новоутворений підпроцес побачить поточний час як дві хвилини пізніше, ніж батьківський процес.