Auf Unix-Systemen ist libfaketime die De-facto- Standardlösung für dieses Problem in der Software. Es führt eine Art Man-in-the-Middle-Vorgang zwischen Ihrer Anwendung und der Zeitbibliothek des Systems durch. Die Anforderungen werden an das System weitergeleitet, die Antworten werden jedoch nach Bedarf geändert. Es ändert auch die Ergebnisse von stat()
Aufrufen, also Dateimodifikationszeiten & c. werden ebenfalls geändert.
Die Einstellungen werden mit Umgebungsvariablen vorgenommen, sodass Sie möglicherweise etwas über diese lernen müssen, wenn Sie nicht bereits mit deren Funktionsweise vertraut sind.
libfaketime unterstützt relative und absolute Offsets, angehaltene und laufende Zeit sowie Beschleunigung oder Verlangsamung. Ich weiß allerdings nicht, wie man rückwärts läuft.
Beachten Sie, dass die aktuelle Version vorgibt, dass Sekunden die höchste Auflösung der Zeit sind, und dass Teile der Antworten im Subsekundenbereich unverändert an die Anwendung weitergeleitet werden. Wenn Sie also die Uhr auf die halbe Geschwindigkeit verlangsamen, wird bei einem Programm mit Sekundenschnelle, das sehr schnelle Zeitaufrufe ausführt, die ganze Sekunde zweimal nacheinander ausgeführt, anstatt nur einmal doppelt so lange. Wenn die Uhr angehalten wird, bedeutet dies, dass die Anwendung eine zufällige Zeit innerhalb der ausgewählten Sekunde sieht.
Leider ist Github heute nicht verfügbar, daher sind die Dokumente derzeit nicht verfügbar, aber das wird wahrscheinlich bald behoben.
Bearbeiten:
Mit Github-Backup habe ich es versucht und festgestellt, dass der Code für die Geschwindigkeitsänderung allgemein genug ist, dass er mit negativen Werten oder allem anderen, was von akzeptiert wird, gut funktioniert atof()
.
Es zeigte sich jedoch ein anderes Problem: Für die Geschwindigkeitsänderung ist neben der aktuellen Zeit und dem gewünschten Zeitversatz ein Zeitursprung erforderlich. Dieser Ursprung wird für Unterprozesse unabhängig festgelegt, sodass (wenn der übergeordnete Prozess eine Minute zurückgezogen wird) (wenn er mit Nenngeschwindigkeit rückwärts läuft) die neuere Zeit eines neu erzeugten Unterprozesses zwei Minuten später als der übergeordnete Prozess angezeigt wird.