Auf Unix-Systemen ist libfaketime die de facto Standardlösung für dieses Problem in Software. Es führt eine Art Man-in-the-Middle-Operation 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 Änderungszeiten für Dateien & c. sind auch modifiziert.
Die Einstellungen werden mit Umgebungsvariablen vorgenommen, daher müssen Sie möglicherweise etwas darüber erfahren, wenn Sie nicht bereits mit deren Arbeitsweise vertraut sind.
libfaketime unterstützt relative und absolute Offsets, Stopp- und Laufzeit sowie Beschleunigung oder Verlangsamung. Ich weiß nicht, wie man rückwärts läuft.
Beachten Sie, dass die aktuelle Version Sekunden vorgibt, die die höchste Auflösung der Zeit ist, die es gibt, und Teile der Antworten in Sekundenbruchteilen unverändert an die Anwendung weiterleitet. Wenn Sie also die Uhr auf die halbe Geschwindigkeit verlangsamen, wird ein sekundenschnelles Programm, das sehr schnelle Zeitanrufe durchführt, die ganze Sekunde zweimal hintereinander durchlaufen und nicht nur zweimal doppelt so lange. Wenn die Uhr angehalten ist, sieht die Anwendung eine zufällige Zeit innerhalb der ausgewählten Sekunde.
Leider ist Github heute inaktiv, daher sind die Dokumente derzeit nicht verfügbar, aber das wird wahrscheinlich bald behoben.
Bearbeiten:
Mit Github Backup habe ich es ausprobiert und fand, dass der Code für die Geschwindigkeitsänderung allgemein genug ist, damit er mit negativen Werten oder irgendetwas, das sonst akzeptiert wird, gut funktioniert atof()
.
Es stellte sich jedoch ein anderes Problem heraus: Für die Änderung der Geschwindigkeit ist neben der tatsächlichen aktuellen Zeit und dem gewünschten Zeitversatz ein Zeitursprung erforderlich. Dieser Ursprung wird für Unterprozesse unabhängig festgelegt, so dass (beim Rückwärtsfahren mit Nenndrehzahl), wenn der übergeordnete Prozess um eine Minute zurückgezogen wurde, ein neu erzeugter Unterprozess die aktuelle Uhrzeit zwei Minuten später als der übergeordnete Prozess sieht.