Em sistemas unix, libfaketime é a solução padrão de fato para esse problema no software. Ele executa uma espécie de operação intermediária entre seu aplicativo e a biblioteca de tempos do sistema. Os pedidos são transmitidos para o sistema, mas as respostas são modificadas conforme necessário. Ele também modifica os resultados das stat()
chamadas, portanto, os tempos de modificação do arquivo etc. também são modificados.
As configurações são feitas com variáveis de ambiente; portanto, talvez você precise aprender sobre elas, se ainda não estiver familiarizado com o funcionamento delas.
libfaketime suporta compensações relativas e absolutas, tempo de parada e execução e aceleração ou lentidão. Eu não sei sobre correr para trás, no entanto.
Observe que a versão atual finge que os segundos são a maior resolução de tempo que existe e transmite partes de segundos de respostas para o aplicativo sem modificação. Assim, se você desacelerar o relógio para a metade da velocidade, um programa consciente de sub-segundos fazendo chamadas de tempo muito rápidas experimentará o segundo inteiro duas vezes um após o outro, em vez de apenas demorar o dobro do tempo. Se o relógio estiver parado, isso significa que o aplicativo vê um tempo aleatório dentro do segundo selecionado.
Infelizmente, o Github está inativo hoje, então os documentos não estão disponíveis no momento, mas isso provavelmente será corrigido em breve.
Editar:
Com o Github de volta, tentei e descobri que o código para a mudança de velocidade é geral o suficiente para funcionar bem com valores negativos ou qualquer outra coisa aceita por atof()
.
No entanto, uma questão diferente tornou-se aparente: para a mudança de velocidade, é necessária uma origem de tempo além do horário atual real e do deslocamento de tempo desejado. Essa origem é definida de forma independente para subprocessos, de modo que (quando rodando para trás na velocidade nominal) quando o processo pai se retrair um minuto, um subprocesso recém-gerado verá o horário atual dois minutos depois do processo pai.