| adjtimex(2) | System Calls Manual | adjtimex(2) |
adjtimex, clock_adjtime, ntp_adjtime - Kernel-Uhr einstellen
Standard-C-Bibliothek (libc, -lc)
#include <sys/timex.h>
int adjtimex(struct timex *Puffer);
int clock_adjtime(clockid_t Uhrken, struct timex *Puffer);
int ntp_adjtime(struct timex *Puffer);
Linux verwendet den Algorithmus von David L. Mills für die Einstellung von Uhren (siehe RFC 5905). Der Systemaufruf adjtimex() liest und setzt optional Einstellparameter für diesen Algorithmus. Ihm wird ein Zeiger auf eine Struktur timex übergeben. Aus ausgewählten Feldwerten davon aktualisiert er Kernel-Parameter. Abschließend wird die gleiche Struktur mit aus den aktuellen Kernelwerten aktualisierten Parametern zurückgeliefert. Die Struktur ist wie folgt deklariert:
struct timex {
int modes; /* Modusauswahl */
long offset; /* Zeitversatz; Nanosekunden, falls STA_NANO
Statusschalter gesetzt ist, andernfalls
Mikrosekunden */
long freq; /* Frequenzversatz; siehe ANMERKUNGEN für Einheiten */
long maxerror; /* Maximaler Fehler (Mikrosekunden) */
long esterror; /* Abgeschätzter Fehler (Mikrosekunden) */
int status; /* Uhrbefehl/-status */
long constant; /* PLL (Phasenregelschleife) Zeitkonstante */
long precision; /* Uhr-Genauigkeit
(Mikrosekunden, nur lesbar) */
long tolerance; /* Uhrfrequenztoleranz (nur lesbar);
siehe ANMERKUNGEN für Einheiten */
struct timeval time;
/* Aktuelle Zeit (nur lesbar, außer für
ADJ_SETOFFSET); nach Rückkehr enthält time.tv_usec
Nanosekunden, falls der STA_NANO-Status-
schalter gesetzt ist, andernfalls Mikrosekunden */
long tick; /* Mikrosekunden zwischen Uhr-Ticks */
long ppsfreq; /* PPS- (Impulse pro Sekunde) Frequenz
(nur lesbar); siehe ANMERKUNGEN für Einheiten */
long jitter; /* PPS-Jitter (nur lesbar); Nanosekunden, falls
STA_NANO Statusschalter gesetzt ist, andernfalls
Mikrosekunden */
int shift; /* PPS-Intervalldauer
(Sekunden, nur lesbar) */
long stabil; /* PPS-Stabilität (nur lesbar);
siehe ANMERKUNGEN für Einheiten */
long jitcnt; /* PPS-Anzahl der Ereignisse, die die
Jitter-Begrenzung überschreiten (nur lesbar) */
long calcnt; /* PPS-Anzahl der Kalibrierungsintervalle
(nur lesbar) */
long errcnt; /* PPS-Anzahl der Kalibrierungsfehler
(nur lesbar) */
long stbcnt; /* PPS-Anzahl der Ereignisse, die die
Stabilitäts-Begrenzung überschreiten (nur lesbar) */
int tai; /* TAI-Versatz, wie durch frühere ADJ_TAI-
Aktionen gesetzt (Sekunden, nur lesbar,
seit Linux 2.6.26) */
/* Weitere Füll-Bytes, um zukünftige Erweiterungen zu ermöglichen */
};
Das Feld modes bestimmt, welche Parameter, falls vorhanden, zu setzen sind. (Wie später auf dieser Seite beschrieben wird, sind die Konstanten für ntp_adjtime() äquivalent, aber anders benannt.) Es darf eine bitweise Oder-Verknüpfung von Null oder mehr der folgenden Bits enthalten:
while (Puffer.time.tv_usec < 0) {
Puffer.time.tv_sec -= 1;
Puffer.time.tv_usec += 1000000000;
}
Alternativ kann modes als einer der folgenden (Mehrfach-Bitmasken-)Werte angegeben werden; in diesem Fall sollten andere Bits nicht in modes angegeben werden:
Normale Benutzer sind auf einen Wert von entweder 0 oder ADJ_OFFSET_SS_READ für modes eingeschränkt. Nur der Superuser darf Parameter setzen.
Das Feld Puffer.status ist eine Bitmaske, die zum Setzen und/oder Abfragen von der NTP-Implementierung zugeordneten Statusbits verwandt wird. Einige Bits in der Maske sind sowohl les- als auch setzbar, während andere nur lesbar sind.
Versuche, nur lesbare Status-Bits zu ändern, werden ohne Meldung ignoriert.
Der Systemaufruf clock_adjtime() (in Linux 2.6.39 hinzugefügt) verhält sich wie adjtimex(), akzeptiert aber ein zusätzliches Argument Uhrken, um die bestimmte Uhr anzugeben, auf der agiert werden soll.
Die Bibliotheksfunktion ntp_adjtime() (beschrieben in dem NTP »Kernel Application Program API«, KAPI) ist eine portierbarere Schnittstelle für die Erledigung der gleichen Aufgaben wie adjtimex(). Abgesehen von den folgenden Punkten ist sie zu adjtimex() identisch:
Bei Erfolg geben adjtimex() und ntp_adjtime() den Status der Uhr, d.h. einen der folgenden Werte, zurück:
Beachten Sie, dass seit Linux 3.4 der Aufruf asynchron erfolgt und der Rückgabewert normalerweise nicht die vom Aufruf selbst ausgelösten Zustandsänderung wiedergibt.
Im Fehlerfall geben diese Aufrufe -1 zurück und setzen errno, um den Fehler anzuzeigen.
Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.
| Schnittstelle | Attribut | Wert |
| ntp_adjtime() | Multithread-Fähigkeit | MT-Safe |
Keiner dieser Schnittstellen ist in POSIX.1 beschrieben.
adjtimex() und clock_adjtime() sind Linux-spezifisch und sollte nicht in portierbaren Programmen benutzt werden.
Das bevorzugte API für den NTP-Daemon ist ntp_adjtime().
Im Struct timex sind freq, ppsfreq und stabil ppm (parts per million, Teile pro Million) mit einem 16-Bit-Bruchteil. Das bedeutet, ein Wert von 1 in diesen Feldern bedeutet tatsächlich 2^-16 ppm und 2^16=65536 ist 1 ppm. Dies ist sowohl für Eingabefelder (für freq) und Ausgabefelder der Fall.
Die von STA_INS und STA_DEL ausgelöste Schaltsekundenverarbeitung wird vom Kernel im Timer-Kontext durchgeführt. Daher wird ein Tick in die Sekunde benötigt, damit die Schaltsekunde eingefügt oder gelöscht wird.
clock_gettime(2), clock_settime(2), settimeofday(2), adjtime(3), ntp_gettime(3), capabilities(7), time(7), adjtimex(8), hwclock(8)
Die deutsche Übersetzung dieser Handbuchseite wurde von Patrick Rother <krd@gulu.net>, Martin Eberhard Schauer <Martin.E.Schauer@gmx.de>, Chris Leick <c.leick@vollbio.de>, Helge Kreutzmann <debian@helgefjell.de> und Mario Blättermann <mario.blaettermann@gmail.com> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer.
| 10. Februar 2023 | Linux man-pages 6.03 |