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