2016-09-27 2 views
0

Ich möchte die Zeit meines Systems aus dem c-Programm einstellen/ändern. Ich habe viel im Internet gesucht, aber kein befriedigendes Ergebnis gefunden. Ich hatte am Tag eine bestimmte Zeit, aber es dauert Sekunden und Mikrosekunden seit dem 1. Januar 1970, 00:00:00 UTC.Setze Zeit in Linux von c Programm

aber ich möchte etwas wie ich explizit geben kann Datum, Jahr, Monat, Stunden, Minuten und Sekunden und UTC-Zeit soll eingestellt werden.

Gibt es eine Bibliotheksfunktion oder einen anderen Mechanismus dafür?

+0

[Eine gute Referenz der Standard-Datum und Uhrzeitfunktionen in C] (http://en.cppreference.com/w/c/chrono) könnte ein guter Anfang sein. –

+0

Sie benötigen ['mktime()'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/mktime.html) für den zweiten Teil; Sie müssen die Untersekunden sorgfältig auswählen. Sie müssen "root" sein, um die Zeit einzustellen. Warum verwenden Sie nicht den Befehl 'date', um den Job auszuführen - es hat einen Modus dafür. –

+0

Beachten Sie, dass das Einstellen der Uhrzeit einige Softwarelizenzen (wie Oracle) ungültig machen kann. Möglicherweise müssen Sie das Betriebssystem neu erstellen, da es, sobald es als ungültig erkannt wurde, Sie nie wieder in einen gültigen Zustand versetzen können. – cup

Antwort

1
  1. Geben Sie die Uhrzeit im YYMMDDhhss-Format in eine struct time ein. Sie können den Wochentag und Tag des Jahres Felder ignorieren. Geben Sie einen negativen Wert in tm_isdst ein, damit das System entscheiden kann, ob die Sommerzeit an diesem Tag gilt.
  2. Rufen Sie mk_time mit einem Zeiger auf das struct time - es wird füllen die fehlenden Felder in der Struktur und geben Sie eine time_t auf dieses Datum festgelegt.
  3. Verwenden Sie settimeofday() mit dem zurückgegebenen Wert in einem struct timeval (Der μs Teil nach Ihren Wünschen). Verwenden Sie "NULL" für das Zeitzonenargument.

Hinweis benötigen Sie die entsprechende (root) Privileg haben, um die Systemzeit zu setzen, und beachten Sie auch, dass settimeofday einige speziellen Besonderheiten auf Linux hat, so ist es durchaus den Manpages empfohlen zu lesen

All Das obige erfordert time.h natürlich in Ihrem Programm enthalten.

Verwandte Themen