W systemach uniksowych libfaketime jest de facto standardowym rozwiązaniem tego problemu w oprogramowaniu. Wykonuje rodzaj pośredniej operacji między aplikacją a biblioteką czasową systemu. Żądania są przekazywane do systemu, ale odpowiedzi są modyfikowane w razie potrzeby. Zmienia również wyniki stat()
wywołań, więc czasy modyfikacji plików i c. są również modyfikowane.
Ustawienia są dokonywane za pomocą zmiennych środowiskowych, więc być może będziesz musiał się o nich dowiedzieć, jeśli nie znasz ich działania.
libfaketime obsługuje przesunięcia względne i bezwzględne, czas zatrzymania i działania oraz przyspieszenie lub zwolnienie. Jednak nie wiem, jak biegać wstecz.
Zauważ, że obecna wersja udaje, że sekundy są najwyższą dostępną rozdzielczością czasu, i przekazuje częściowe sekundy odpowiedzi do aplikacji bez zmian. Tak więc, jeśli zwolnisz zegar do połowy prędkości, program świadomy na sekundę, wykonujący bardzo szybkie połączenia czasowe, doświadczy całej sekundy dwa razy po sobie, a nie tylko dwa razy dłużej. Jeśli zegar zostanie zatrzymany, oznacza to, że aplikacja widzi losowy czas w wybranej sekundzie.
Niestety Github jest dziś niedostępny, więc dokumenty nie są teraz dostępne, ale prawdopodobnie zostanie to wkrótce naprawione.
Edytować:
Z Githubem wykonałem kopię zapasową i wypróbowałem go, i stwierdziłem, że kod zmiany prędkości jest na tyle ogólny, że działa dobrze z wartościami ujemnymi lub czymkolwiek innym akceptowanym przez atof()
.
Jednak pojawił się inny problem: w celu zmiany prędkości konieczne jest podanie czasu początkowego oprócz rzeczywistego czasu bieżącego i pożądanego przesunięcia czasowego. To źródło jest ustawiane niezależnie dla podprocesów, tak więc (gdy biegnie wstecz z nominalną prędkością), gdy proces macierzysty cofnie się o jedną minutę, nowo odrodzony podproces zobaczy aktualny czas dwie minuty później niż proces macierzysty.