adjtimex(2) - wariua/manpages-ko GitHub Wiki
adjtimex, ntp_adjtime - 컀λ ν΄λ μ‘°μ
#include <sys/timex.h>
int adjtimex(struct timex *buf);
int ntp_adjtime(struct timex *buf);
리λ
μ€μμλ David L. Millsμ ν΄λ μ‘°μ μκ³ λ¦¬μ¦(RFC 5905)μ μ¬μ©νλ€. μμ€ν
νΈμΆ adjtimex()
λ μ΄ μκ³ λ¦¬μ¦μ μ‘°μ λ§€κ°λ³μλ€μ μ½κ³ μ€μ νλ€. timex
ꡬ쑰체 ν¬μΈν°λ₯Ό λ°μμ (μ νλ) νλ κ°λ€λ‘ 컀λ λ§€κ°λ³μλ₯Ό κ°±μ νκ³ , κ·Έ ꡬ쑰체λ₯Ό νν 컀λ κ°λ€λ‘ κ°±μ ν΄μ λ°ννλ€. ꡬ쑰체λ λ€μκ³Ό κ°μ΄ μ μΈλΌ μλ€.
struct timex {
int modes; /* λμ μ ν */
long offset; /* μκ° μ€νμ
. μν νλκ·Έ STA_NANOκ°
μ€μ λΌ μμΌλ©΄ λλ
Έμ΄, μλλ©΄
λ§μ΄ν¬λ‘μ΄ */
long freq; /* μ§λμ μ€νμ
. λ¨μλ NOTES μ°Έκ³ */
long maxerror; /* μ΅λ μ€μ°¨ (λ§μ΄ν¬λ‘μ΄) */
long esterror; /* μΆμ μ€μ°¨ (λ§μ΄ν¬λ‘μ΄) */
int status; /* ν΄λ λͺ
λ Ή/μν */
long constant; /* μμ λκΈ° 루ν(PLL) μκ° μμ */
long precision; /* ν΄λ μ λ°λ
(λ§μ΄ν¬λ‘μ΄, μ½κΈ° μ μ©) */
long tolerance; /* ν΄λ μ§λμ νμ© μ€μ°¨ (μ½κΈ° μ μ©).
λ¨μλ NOTES μ°Έκ³ */
struct timeval time;
/* νμ¬ μκ°. (μ½κΈ° μ μ©, ADJ_SETOFFSETμμ
μμΈ.) λ°ν μ time.tv_usecμ λ΄κΈ°λ
κ°μ΄ STA_NANO μν νλκ·Έκ° μ€μ λΌ
μμΌλ©΄ λλ
Έμ΄, μλλ©΄ λ§μ΄ν¬λ‘μ΄ */
long tick; /* ν΄λ ν± κ°κ²© (λ§μ΄ν¬λ‘μ΄) */
long ppsfreq; /* νμ€ λ°λ³΅(PPS) μ§λμ
(μ½κΈ° μ μ©). λ¨μλ NOTES μ°Έκ³ */
long jitter; /* PPS μ§ν° (μ½κΈ° μ μ©). μν νλκ·Έ
STA_NANOκ° μ€μ λΌ μμΌλ©΄ λλ
Έμ΄,
μλλ©΄ λ§μ΄ν¬λ‘μ΄ */
int shift; /* PPS κ΅¬κ° κΈΈμ΄
(μ΄, μ½κΈ° μ μ©) */
long stabil; /* PPS μμ μ± (μ½κΈ° μ μ©).
λ¨μλ NOTES μ°Έκ³ */
long jitcnt; /* PPS μ§ν° μ ν μ΄κ³Ό λ°μ νμ
(μ½κΈ° μ μ©) */
long calcnt; /* PPS 보μ κ΅¬κ° μ (μ½κΈ° μ μ©) */
long errcnt; /* PPS 보μ μ€λ₯ νμ (μ½κΈ° μ μ©) */
long stbcnt; /* PPS μμ μ± μ ν μ΄κ³Ό λ°μ νμ
(μ½κΈ° μ μ©) */
int tai; /* TAI μ€νμ
. μμ ADJ_TAI λμμμ
μ€μ ν κ°. (μ΄, μ½κΈ° μ μ©,
리λ
μ€ 2.6.26λΆν°.) */
/* ν₯ν νμ₯μ μν μΆκ° ν¨λ© λ°μ΄νΈ */
};
modes
νλκ° μ€μ ν λ§€κ°λ³μλ₯Ό κ²°μ νλ€. (μ μ ν μ€λͺ
νκ² μ§λ§ ntp_adjtime()
μλ λλ±νμ§λ§ μ΄λ¦μ΄ λ€λ₯Έ μμλ€μ μ΄λ€.) κ·Έ νλλ λ€μ λΉνΈλ€μ 0κ° μ΄μ λΉνΈ or μ‘°ν©ν΄μ λ΄μ λΉνΈ λ§μ€ν¬μ΄λ€.
ADJ_OFFSET
-
buf.offset
μΌλ‘ μκ° μ€νμ μ€μ . 리λ μ€ 2.6.26λΆν°λ μ 곡λ κ°μ (-0.5s, +0.5s) λ²μλ‘ μλΌλΈλ€. μ΄μ 컀λμμλ μ 곡λ κ°μ΄ λ²μλ₯Ό λ²μ΄λλ©΄EINVAL
μ€λ₯κ° λ°μνλ€. ADJ_FREQUENCY
-
buf.freq
λ‘ μ§λμ μ€νμ μ€μ . 리λ μ€ 2.6.26λΆν°λ μ 곡λ κ°μ (-32768000, +32768000) λ²μλ‘ μλΌλΈλ€. μ΄μ 컀λμμλ μ 곡λ κ°μ΄ λ²μλ₯Ό λ²μ΄λλ©΄EINVAL
μ€λ₯κ° λ°μνλ€. ADJ_MAXERROR
-
buf.maxerror
λ‘ μ΅λ μκ° μ€μ°¨ μ€μ . ADJ_ESTERROR
-
buf.esterror
λ‘ μΆμ μκ° μ€μ°¨ μ€μ . ADJ_STATUS
-
buf.status
λ‘ ν΄λ μν λΉνΈ μ€μ . μ΄ λΉνΈλ€μ λν΄μ μλμμ μ€λͺ νλ€. ADJ_TIMECONST
-
buf.constant
λ‘ PLL μκ° μμ μ€μ .STA_NANO
μν νλκ·Έ(μλ μ°Έκ³ )κ° ν΄μ λΌ μμΌλ©΄ 컀λμμ μ΄ κ°μ 4λ₯Ό λνλ€. -
ADJ_SETOFFSET
(리λ μ€ 2.6.39λΆν°) - νμ¬ μκ°μ
buf.time
λνκΈ°.buf.status
μADJ_NANO
νλκ·Έκ° ν¬ν¨λΌ μμΌλ©΄buf.time.tv_usec
μ λλ Έμ΄ κ°μΌλ‘ ν΄μνλ€. μλλ©΄ λ§μ΄ν¬λ‘μ΄λ‘ ν΄μνλ€. -
ADJ_MICRO
(리λ μ€ 2.6.26λΆν°) - λ§μ΄ν¬λ‘μ΄ μ λ°λ μ ν.
-
ADJ_NANO
(리λ μ€ 2.6.26λΆν°) - λλ
Έμ΄ μ λ°λ μ ν.
ADJ_MICRO
μADJ_NANO
μ€ νλλ§ μ§μ ν΄μΌ νλ€. -
ADJ_TAI
(리λ μ€ 2.6.26λΆν°) -
buf.tai
λ‘ κ΅μ μμμ(TAI) μ€νμ μ€μ .ADJ_TAI
λ₯ΌADJ_TIMECONST
μ ν¨κ» μ°μ§ λ§μμΌ νλ€. κ·Έ λͺ¨λμμλbuf.constant
νλλ₯Ό μ΄μ©νκΈ° λλ¬Έμ΄λ€.TAIκ° λ¬΄μμ΄κ³ TAIμ UTCμ μ°¨μ΄κ° λμ§μ λν μ€λͺ μ BIPM(http://www.bipm.org/en/bipm/tai/tai.html) μ°Έκ³ .
ADJ_TICK
-
buf.tick
μΌλ‘ ν± κ°μ μ€μ .
λλ modes
μ λ€μ (μ¬λ¬ λΉνΈλ‘ λ λ§μ€ν¬) κ°λ€ μ€ νλλ₯Ό μ§μ ν μλ μμΌλ©°, κ·Έ κ²½μ° modes
μ λ€λ₯Έ λΉνΈλ€μ μ§μ νμ§ λ§μμΌ νλ€.
ADJ_OFFSET_SINGLESHOT
- ꡬμ
adjtime()
λ°©μ:buf.offset
μ λ§μ΄ν¬λ‘μ΄ λ¨μλ‘ μ§μ λ μ‘°μ κ°μ λ°λΌ μκ°μ (μ μ§μ μΌλ‘) μ‘°μ νλ€. -
ADJ_OFFSET_SS_READ
(리λ μ€ 2.6.28λΆν° λμ) - μμ
ADJ_OFFSET_SINGLESHOT
λμ νμ λ¨μ μ‘°μ μκ° μμ (buf.offset
μΌλ‘) λ°ννλ€. μ΄ κΈ°λ₯μ 리λ μ€ 2.6.24μμ μΆκ°λμλλ° λ¦¬λ μ€ 2.6.28κΉμ§λ μ¬λ°λ‘ λμνμ§ μμλ€.
μΌλ° μ¬μ©μλ modes
μ 0 λλ ADJ_OFFSET_SS_READ
κ°λ§ μ§μ ν μ μλ€. μνΌμ μ λ§ λ§€κ°λ³μ μ€μ μ ν μ μλ€.
buf.status
νλλ NTP ꡬνκ³Ό κ΄λ ¨λ μν λΉνΈλ₯Ό μ€μ λ°/λλ μ‘°ννλ λ° μ°λ λΉνΈ λ§μ€ν¬μ΄λ€. λ§μ€ν¬μ μΌλΆ λΉνΈλ μ½κΈ°μ μ€μ μ΄ λͺ¨λ κ°λ₯νμ§λ§ λλ¨Έμ§λ μ½κΈ° μ μ©μ΄λ€.
-
STA_PLL
(μ½κΈ°-μ°κΈ°) -
ADJ_OFFSET
μ ν΅ν μμ λκΈ° 루ν(PLL) κ°±μ νμ±ν. -
STA_PPSFREQ
(μ½κΈ°-μ°κΈ°) - νμ€ λ°λ³΅(PPS) μ§λμ μ‘°μ νμ±ν.
-
STA_PPSTIME
(μ½κΈ°-μ°κΈ°) - PPS μκ° μ‘°μ νμ±ν.
-
STA_FLL
(μ½κΈ°-μ°κΈ°) - μ§λμ λκΈ° 루ν(FLL) λͺ¨λ μ ν.
-
STA_INS
(μ½κΈ°-μ°κΈ°) - κ·Έ UTC μΌμ λ§μ§λ§ μ΄ λ€μμ μ€μ΄λ₯Ό μ½μ νλ€. κ·Έλμ κ·Έ λ μ λ§μ§λ§ λΆμ 1μ΄λ§νΌ λμΈλ€. μ΄ νλκ·Έκ° μ€μ λΌ μλ λμμ λ§€μΌ μ€μ΄ μ½μ μ΄ μΌμ΄λκ² λλ€.
-
STA_DEL
(μ½κΈ°-μ°κΈ°) - κ·Έ UTC μΌμ λ§μ§λ§ μ΄μμ μ€μ΄λ₯Ό μμ νλ€. μ΄ νλκ·Έκ° μ€μ λΌ μλ λμμ λ§€μΌ μ€μ΄ μμ κ° μΌμ΄λκ² λλ€.
-
STA_UNSYNC
(μ½κΈ°-μ°κΈ°) - ν΄λμ΄ λΉλκΈ° μνμ.
-
STA_FREQHOLD
(μ½κΈ°-μ°κΈ°) -
μ§λμ μ μ§. 보ν΅
ADJ_OFFSET
μ ν΅ν΄ μ‘°μ μ νλ©΄ μ§λμ κ°μ μ‘°μ λ μ΄λ€μ§κ² λλ€. κ·Έλμ νΈμΆ ν λ²μΌλ‘λ νμ¬ μ€νμ μ λ°λ‘μ‘κ³ , κ°μ λ°©ν₯μΌλ‘ μ€νμ μ μ μ΄ λ°λ³΅ν΄μ μ΄λ€μ§λ©΄ μμ μ§λμ μ‘°μ μ΄ λμ λΌμ μ₯κΈ°μ μΈ μ곑μ μμ νκ² λλ€.μ΄ νλκ·Έλ
ADJ_OFFSET
κ°μΌλ‘ μ μ μ ν λ κ·Έ μμ μ§λμ μ‘°μ μ΄ μ΄λ€μ§μ§ μκ² νλ€. -
STA_PPSSIGNAL
(μ½κΈ° μ μ©) - μ ν¨ν νμ€ λ°λ³΅(PPS) μ νΈ μμ.
-
STA_PPSJITTER
(μ½κΈ° μ μ©) - PPS μ νΈ μ§ν° μ΄κ³Ό.
-
STA_PPSWANDER
(μ½κΈ° μ μ©) - PPS μ νΈ μλ μ΄κ³Ό.
-
STA_PPSERROR
(μ½κΈ° μ μ©) - PPS μ νΈ λ³΄μ μ€λ₯.
-
STA_CLOCKERR
(μ½κΈ° μ μ©) - ν΄λ νλμ¨μ΄ μ€λμ.
-
STA_NANO
(μ½κΈ° μ μ©, 리λ μ€ 2.6.26λΆν°) - ν΄μλ (0 = λ§μ΄ν¬λ‘μ΄, 1 = λλ
Έμ΄).
ADJ_NANO
λ₯Ό ν΅ν΄ μ€μ νκ³ADJ_MICRO
λ₯Ό ν΅ν΄ ν΄μ νλ€. -
STA_MODE
(리λ μ€ 2.6.26λΆν°) - λͺ¨λ (0 = μμ λκΈ° 루ν, 1 = μ§λμ λκΈ° 루ν).
-
STA_CLK
(μ½κΈ° μ μ©, 리λ μ€ 2.6.26λΆν°) - ν΄λ μμ² (0 = A, 1 = B). νμ¬ μ°μ§ μμ.
μ½κΈ° μ μ©μΈ status
λΉνΈλ₯Ό μ€μ νλ €κ³ μλνλ©΄ μ‘°μ©ν 무μνλ€.
(NTP "Kernel Application Program API", μ¦ KAPIμ κΈ°μ λΌ μλ) ntp_adjtime()
λΌμ΄λΈλ¬λ¦¬ ν¨μλ adjtimex()
μ κ°μ μΌμ μνν μ μλ λ μ΄μμ± μ’μ μΈν°νμ΄μ€μ΄λ€. λ€μ μ¬νλ€μ μ μΈνλ©΄ adjtime()
κ³Ό λμΌνλ€.
-
modes
μ μ°λ μμλ€μ΄ "ADJ_" λμ "MOD_"λ‘ μμνκ³ λ·λΆλΆμ΄ κ°λ€. (μ¦MOD_OFFSET
,MOD_FREQUENCY
λ±μ΄λ€.) λ¨ μλ νλͺ©λ€μ μμΈμ΄λ€. -
ADJ_OFFSET_SINGLESHOT
μ λμμ΄λMOD_CLKA
μ΄λ€. -
ADJ_TICK
μ λμμ΄λMOD_CLKB
μ΄λ€. -
KAPIμ κΈ°μ λΌ μμ§ μμ
ADJ_OFFSET_SS_READ
μ λμμ΄λ μλ€.
μ±κ³΅ μ adjtimex()
λ° ntp_adjtime()
μ ν΄λ μνλ₯Ό λ°ννλ€. μ¦ λ€μ κ°λ€ μ€ νλλ₯Ό λ°ννλ€.
TIME_OK
- ν΄λμ΄ λκΈ°νλΌ μκ³ λκΈ° μ€μΈ μ€μ΄ μ‘°μ μ΄ μλ€.
TIME_INS
- κ·Έ UTC μΌ λμμ μ€μ΄κ° μΆκ°λ κ²μμ λνλΈλ€.
TIME_DEL
- κ·Έ UTC μΌ λμμ μ€μ΄κ° μμ λ κ²μμ λνλΈλ€.
TIME_OOP
- μ€μ΄ μ½μ μ΄ μ§ν μ€μ΄λ€.
TIME_WAIT
- μ€μ΄ μ½μ
λ΄μ§ μμ κ° μλ£λλ€. λ€μ
ADJ_STATUS
λμμμSTA_INS
λ°STA_DEL
νλκ·Έλ₯Ό ν΄μ ν λκΉμ§ μ΄ κ°μ΄ λ°νλλ€. TIME_ERROR
-
μμ€ν ν΄λμ΄ λ―Ώμ λ§ν μλ²μ λκΈ°νλΌ μμ§ μλ€. λ€μ μ€ νλλΌλ μ°ΈμΌ λ μ΄ κ°μ΄ λ°νλλ€.
-
STA_UNSYNC
λSTA_CLOCKERR
μ€ νλκ° μ€μ λΌ μλ€. -
STA_PPSSIGNAL
μ΄ ν΄μ λΌ μμΌλ©΄μSTA_PPSFREQ
λSTA_PPSTIME
μ΄ μ€μ λΌ μλ€. -
STA_PPSTIME
κ³ΌSTA_PPSJITTER
κ° λͺ¨λ μ€μ λΌ μλ€. -
STA_PPSFREQ
κ° μ€μ λΌ μμΌλ©΄μSTA_PPSWANDER
λSTA_PPSJITTER
κ° μ€μ λΌ μλ€.
μ¬λ³Ό μ΄λ¦
TIME_BAD
λTIME_ERROR
μ λμμ΄μ΄λ©° νμ νΈνμ±μ μν΄ μ 곡λλ€. -
μ°Έκ³ λ‘ λ¦¬λ μ€ 3.4λΆν°λ νΈμΆμ΄ λΉλκΈ°μ μΌλ‘ λμνλ―λ‘ μΌλ°μ μΌλ‘ λ°ν κ°μ΄ κ·Έ νΈμΆ μμ²΄λ‘ μΈν μν λ³νλ₯Ό λ°μνμ§ μκ² λλ€.
μ€ν¨ μ μ΄ νΈμΆλ€μ -1μ λ°ννκ³ errno
λ₯Ό μ€μ νλ€.
EFAULT
-
buf
κ° μ°κΈ° κ°λ₯ν λ©λͺ¨λ¦¬λ₯Ό κ°λ¦¬ν€κ³ μμ§ μλ€. -
EINVAL
(리λ μ€ 2.6.26 μ 컀λ) -
buf.freq
λ₯Ό λ²μ (-33554432, +33554432) λ°μ κ°μΌλ‘ μ€μ νλ € νλ€. -
EINVAL
(리λ μ€ 2.6.26 μ 컀λ) -
buf.offset
μ νμ© λ²μ λ°μ κ°μΌλ‘ μ€μ νλ € νλ€. 리λ μ€ 2.0 μ μ 컀λμμλ νμ© λ²μκ° (-131072, +131072)μλ€. 리λ μ€ 2.0λΆν°λ νμ© λ²μκ° (-512000, +512000)μ΄λ€. EINVAL
-
buf.status
λ₯Ό μμ λμ΄λ κ² μΈμ κ°μΌλ‘ μ€μ νλ € νλ€. EINVAL
-
buf.tick
μ900000/HZ
μμ1100000/HZ
κΉμ§ λ²μ λ°μ κ°μΌλ‘ μ€μ νλ € νλ€. μ¬κΈ°μHZ
λ μμ€ν νμ΄λ¨Έ μΈν°λ½νΈ λΉλμ΄λ€. EPERM
-
buf.modes
κ° 0μ΄λADJ_OFFSET_SS_READ
κ° μλλ©° νΈμΆμμκ² μΆ©λΆν νΉκΆμ΄ μλ€. 리λ μ€μμλCAP_SYS_TIME
μλ₯μ΄ νμνλ€.
μ΄ μ μμ μ¬μ©νλ μ©μ΄λ€μ λν μ€λͺ μ attributes(7)λ₯Ό 보λΌ.
μΈν°νμ΄μ€ | μμ± | κ° |
---|---|---|
ntp_adjtime() |
μ€λ λ μμ μ± | MT-Safe |
μ΄ μΈν°νμ΄μ€λ€ μ€ μ΄λ κ²λ POSIX.1μ κΈ°μ λΌ μμ§ μλ€.
adjtimex()
λ 리λ
μ€ μ μ©μ΄λ―λ‘ μ΄μμ±μ΄ μμ΄μΌ νλ νλ‘κ·Έλ¨μμλ μ¬μ©νμ§ λ§μμΌ νλ€.
NTP λ°λͺ¬μκ² μ λΉν APIλ ntp_adjtime()
μ΄λ€.
timex
ꡬ쑰체μμ freq
, ppsfreq
, stabil
μ λ°±λ§λΆμ¨(ppm)μ΄κ³ 16λΉνΈλ μμλΆμ΄λ€. μ¦ κ·Έ νλλ€μμ κ° 1μ 2^-16 ppmμ λ»νκ³ 2^16=65536μ΄ 1 ppmμ΄λ€. μ
λ ₯ κ°(freq
)κ³Ό μΆλ ₯ κ° λͺ¨λμμ κ·Έλ λ€.
STA_INS
λ° STA_DEL
λ‘ μΈν μ€μ΄ μ²λ¦¬λ 컀λ νμ΄λ¨Έ λ¬Έλ§₯μμ μ΄λ€μ§λ€. λ°λΌμ μ€μ΄λ₯Ό μΆκ° λ΄μ§ μμ νλ €λ©΄ μ΄λΉ ν ν±μ΄ κ±Έλ¦¬κ² λλ€.
settimeofday(2), adjtime(3), ntp_gettime(3), capabilities(7), time(7), adjtimex(8)
, hwclock(8)
NTP "Kernel Application Program Interface" (http://www.slac.stanford.edu/comp/unix/package/rtems/src/ssrlApps/ntpNanoclock/api.htm)
2019-03-06