adjtimex

adjtimex是一個計算機算法。Linux 使用 David L. Mill 的時鐘調整算法系統調用 adjtimex() 讀取和可選地設定該算法的調整參數。

頭檔案,函式原型,說明,返回值,錯誤,

頭檔案

#include <sys/timex.h>

函式原型

int adjtimex(struct timex *buf);

說明

Linux 使用 David L. Mill 的時鐘調整算法系統調用 adjtimex() 讀取和可選地設定該算法的調整參數。它以一個指向結構體 timex 指針為參數,更新核心參數相應的值,並且通過相同的結構體來返回核心當前的值。這個結構體被聲明為如下:
struct timex {
int modes; /* 模式選擇符 */
long offset; /* 時間偏移 (微秒) */
long freq; /* 頻率偏移 (由 ppm 縮放) */
long maxerror; /* 最大錯誤 (微秒) */
long esterror; /* 估計的錯誤 (微秒) */
int status; /* 時鐘 命令/狀態 */
long constant; /* pll time constant */
long precision; /* clock precision (usec) (read-only) */
long tolerance; /* clock frequency tolerance (ppm) (read-only) */
struct timeval time; /* current time (read-only) */
long tick; /* 時鐘滴答之間的微秒 */
};
modes 域用來指定哪個參數用於設定,如果需要的話。它可能包含下面值的位-或的組合:
#define ADJ_OFFSET 0x0001 /* 時間利偏移 */
#define ADJ_FREQUENCY 0x0002 /* 頻率偏移 */
#define ADJ_MAXERROR 0x0004 /* 最大錯誤值 */
#define ADJ_ESTERROR 0x0008 /* 估計的錯誤值 */
#define ADJ_STATUS 0x0010 /* 時鐘狀態 */
#define ADJ_TIMECONST 0x0020 /* pll time constant */
#define ADJ_TICK 0x4000 /* 時鐘滴答值 */
#define ADJ_OFFSET_SINGLESHOT 0x8001 /* old-fashioned adjtime() */
一般用戶嚴格要求把 mode 的值設定為零,只有超級用戶可以設定某些參數。
注意:adjtimex() 是 Linux 定義並不應該出現在可移植的程式里。參看 adjtime(3) 來獲得更好移植性,但卻缺少靈活性的調整系統時鐘的方法。

返回值

成功時,adjtimex() 返回時鐘狀態:
#define TIME_OK 0 /* 時鐘已同步 */
#define TIME_INS 1 /* 插入調整值 */
#define TIME_DEL 2 /* 刪除調整值 */
#define TIME_OOP 3 /* 調整正進行 */
#define TIME_WAIT 4 /* 調整已經發生 */
#define TIME_BAD 5 /* 時鐘沒有同步 */
失敗時,adjtimex() 返回 -1 並把 errno 設定為合適的值。

錯誤

EFAULT
buf 沒有指向一個可寫的記憶體。
EINVAL
試圖設定,但是 buf.offset 超過從 -131071 到 +131071 範圍,或者 buf.status 不是上面列出的值,或者 buf.tick 值超出從 900000/HZ 到 1100000/HZ,此處的 HZ 是系統時鐘中斷頻率。
EPERM
buf.mode 不是零但調用者沒有足夠的許可權。在 Linux 下至少需要要 CAP_SYS_TIME 許可權。

相關詞條

熱門詞條

聯絡我們