ΠΠ±Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° it_value ΠΈ it_interval ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΡΡΡΠΊΡΡΡΠ°ΠΌΠΈ ΡΠΈΠΏΠ° struct timespec β Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ POSIX-ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΡΠ° ΡΡΡΡΠΊΡΡΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π°ΠΌ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡΡΡ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ Π΄ΠΎΠ»Π΅ΠΉ ΡΠ΅ΠΊΡΠ½Π΄. ΠΠ΅ΡΠ²ΡΠΉ Π΅Π΅ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, tv_sec, β ΡΡΠΎ ΡΠΈΡΠ»ΠΎ ΡΠ΅ΠΊΡΠ½Π΄, Π²ΡΠΎΡΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, tv_nsec, β ΡΠΈΡΠ»ΠΎ Π½Π°Π½ΠΎΡΠ΅ΠΊΡΠ½Π΄ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠ΅ΠΊΡΠ½Π΄Π΅. (ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ tv_nsec Π² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΡΠ΅Π²ΡΡΠ°ΡΡΠ΅Π΅ 1 ΠΌΠΈΠ»Π»ΠΈΠ°ΡΠ΄ β ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°ΡΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ 1 ΡΠ΅ΠΊΡΠ½Π΄Ρ).
ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ²:
it_value.tv_sec = 5;
it_value.tv_nsec = 500000000;
it_interval.tv_sec = 0;
it_interval.tv_nsec = 0;
ΠΡΠΎ ΡΡΠΎΡΠΌΠΈΡΡΠ΅Ρ ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΡΠΉ ΡΠ°ΠΉΠΌΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ΅ΡΠ΅Π· 5,5 ΡΠ΅ΠΊΡΠ½Π΄Ρ. (5,5 ΡΠ΅ΠΊΡΠ½Π΄ ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΡΡΡ ΠΈΠ· 5 ΡΠ΅ΠΊΡΠ½Π΄ ΠΈ 500,000,000 Π½Π°Π½ΠΎΡΠ΅ΠΊΡΠ½Π΄.)
ΠΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ Π·Π΄Π΅ΡΡ, ΡΡΠΎ ΡΡΠΎΡ ΡΠ°ΠΉΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΅ΡΠ»ΠΈ Π±Ρ ΡΡΠΎ Π±ΡΠ»ΠΎ Π½Π΅ ΡΠ°ΠΊ, ΡΠΎ Π΅Π³ΠΎ Π²ΡΠ΅ΠΌΡ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΡ ΡΠΆΠ΅ Π΄Π°Π²Π½ΠΎ Π±Ρ Π΅Π³ΠΎ ΠΈΡΡΠ΅ΠΊΠ»ΠΎ (5.5 ΡΠ΅ΠΊΡΠ½Π΄ Ρ ΠΌΠΎΠΌΠ΅Π½ΡΠ° 00:00 ΠΏΠΎ ΠΡΠΈΠ½Π²ΠΈΡΡ, 1 ΡΠ½Π²Π°ΡΡ 1970).
ΠΡΡΠ³ΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ:
it_value.tv_sec = 987654321;
it_value.tv_nsec = 0;
it_interval.tv_sec = 0;
it_interval.tv_nsec = 0;
ΠΠ°Π½Π½Π°Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΡΠΎΡΠΌΠΈΡΡΠ΅Ρ ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΡΠΉ ΡΠ°ΠΉΠΌΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² ΡΠ΅ΡΠ²Π΅ΡΠ³, 19 Π°ΠΏΡΠ΅Π»Ρ 2001 Π³ΠΎΠ΄Π° Π² 00:25:21 ΠΏΠΎ EDT. (Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΌΠΎΠ³ΡΡ Π²Π°ΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡΠΉ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π² Β«ΡΠΈΡΠ»ΠΎ ΡΠ΅ΠΊΡΠ½Π΄, ΠΈΡΡΠ΅ΠΊΡΠ΅Π΅ Ρ 00:00:00 ΠΏΠΎ ΠΡΠΈΠ½Π²ΠΈΡΡ, 1 ΡΠ½Π²Π°ΡΡ 1970 Π³ΠΎΠ΄Π°Β». Π‘ΠΌ. ΡΡΠ½ΠΊΡΠΈΠΈ time(), asctime(), ctime(), mktime(), strftime(), ΠΈ Ρ.Π΄.).
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, ΡΡΠΎ ΡΡΠΎ Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΠΉ ΡΠ°ΠΉΠΌΠ΅Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΆΠ΄Π°ΡΡ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π±Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄ΠΎΠ»Π³ΠΎ (987654321 ΡΠ΅ΠΊΡΠ½Π΄ β ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΠΎ 31.3 Π³ΠΎΠ΄Π°).
ΠΡΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ Π² Π΄Π²ΡΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ Ρ Π³ΠΎΠ²ΠΎΡΠΈΠ»: Β«ΠΌΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΒ». Π ΠΊΠΎΠ΄Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ timer_settime() Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²! ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΉΠΌΠ΅Ρ Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΠΌ ΠΈΠ»ΠΈ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌ. Π§ΡΠΎ Π΄ΠΎ ΡΠ΄ΡΠ°, ΡΠΎ ΠΎΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΡΠΎ ΡΡΠ°ΡΡΠ»ΠΈΠ²ΠΎ Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊΠΎΠ΅-Π½ΠΈΠ±ΡΠ΄Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ Π½Π° 31.3 Π³ΠΎΠ΄Π° Π²ΠΏΠ΅ΡΠ΅Π΄.
Π Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Ρ:
it_value.tv_sec = 1;
it_value.tv_nsec = 0;
it_interval.tv_sec = 0;
it_interval.tv_nsec = 500000000;
ΠΡΠ»ΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ, ΡΡΠΎ ΡΡΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ°ΠΉΠΌΠ΅Ρ, ΠΎΠ½ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ΅ΡΠ΅Π· ΠΎΠ΄Π½Ρ ΡΠ΅ΠΊΡΠ½Π΄Ρ ΠΈ Π΄Π°Π»Π΅Π΅ ΠΊΠ°ΠΆΠ΄ΡΠ΅ ΠΏΠΎΠ»ΡΠ΅ΠΊΡΠ½Π΄Ρ. ΠΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊΠ°ΠΊΠΎΠ³ΠΎ Π±Ρ ΡΠΎ Π½ΠΈ Π±ΡΠ»ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π° ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΡ.
Π‘Π΅ΡΠ²Π΅Ρ Ρ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΠΈΠΌΠΏΡΠ»ΡΡΠ°ΠΌΠΈ
ΠΠ΅ΡΠ²ΠΎΠ΅, ΡΡΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ, β ΡΡΠΎ ΡΠ΅ΡΠ²Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΆΠ΅Π»Π°Π΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ. Π’ΠΈΠΏΠΎΠ²ΡΠΌΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ ΡΠ°ΠΊΠΎΠΉ ΡΡ Π΅ΠΌΡ ΡΠ²Π»ΡΡΡΡΡ:
β’ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΡΠ°ΠΉΠΌ-Π°ΡΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ²;
β’ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΎΠ±ΡΡΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ².
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π΅ΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅, ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅, ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ Π²Π΅ΡΠ΅ΠΉ β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ ΡΠ·Π»ΠΎΠ² ΡΠ΅ΡΠΈ (Β«Ρ ΠΆΠΈΠ²Β»), Π·Π°ΠΏΡΠΎΡΡ Π½Π° ΠΏΠΎΠ²ΡΠΎΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ, ΠΈ Ρ.ΠΏ.
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΡΠ°ΠΉΠΌ-Π°ΡΡΡΠ ΡΠ°ΠΊΠΎΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ»ΡΠ³Ρ, ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ ΡΠΏΠΎΡΠΎΠ±Π΅Π½ Π·Π°Π΄Π°ΡΡ ΡΠ°ΠΉΠΌ-Π°ΡΡ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΡΠ°ΠΌΡΡ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ . ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠ°Π·Π°ΡΡ ΡΠ΅ΡΠ²Π΅ΡΡ Β«Π²ΡΠ΄Π°ΠΉ ΠΌΠ½Π΅ Π΄Π°Π½Π½ΡΠ΅ Π·Π° 15 ΡΠ΅ΠΊΡΠ½Π΄Β» ΠΈΠ»ΠΈ Β«Π΄Π°ΠΉ ΠΌΠ½Π΅ Π·Π½Π°ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΈΡΡΠ΅ΠΊΡΡ 10 ΡΠ΅ΠΊΡΠ½Π΄Β», ΠΈΠ»ΠΈ Β«ΠΆΠ΄ΠΈ ΠΏΡΠΈΡ ΠΎΠ΄Π° Π΄Π°Π½Π½ΡΡ , Π½ΠΎ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ 2 ΡΠ΅ΠΊΡΠ½Π΄Β».
ΠΡΠ΅ ΡΡΠΎ β ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΡΠ°ΠΉΠΌ-Π°ΡΡΠΎΠ². ΠΠ»ΠΈΠ΅Π½Ρ ΠΏΠΎΡΡΠ»Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΈ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ. Π‘Π΅ΡΠ²Π΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ° (ΡΠ°Π· Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ, ΡΠ΅ΠΆΠ΅ ΠΈΠ»ΠΈ ΡΠ°ΡΠ΅) ΠΈ ΠΏΠΎΠ΄ΡΡΠΈΡΡΠ²Π°Π΅Ρ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ½ ΠΏΠΎΠ»ΡΡΠΈΠ». ΠΠΎΠ³Π΄Π° ΡΠΈΡΠ»ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎ ΡΠ°ΠΉΠΌ-Π°ΡΡΠ°Ρ ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ, ΡΠ΅ΡΠ²Π΅Ρ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡ Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎ ΡΠ°ΠΉΠΌ-Π°ΡΡΠ΅ ΠΈΠ»ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ Π΄Π°Π½Π½ΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ ΡΡΠΏΠ΅Π» Π½Π°ΠΊΠΎΠΏΠΈΡΡ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ β ΡΡΠΎ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π΄Π²ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΡΡ ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎ ΡΠ°ΠΉΠΌ-Π°ΡΡΠ΅ Π² Π²ΠΈΠ΄Π΅ ΠΈΠΌΠΏΡΠ»ΡΡΠ°. ΠΠ΅ΡΠ²ΠΎΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΡ: Β«ΠΠ°ΠΉ ΠΌΠ½Π΅ Π·Π½Π°ΡΡ, Π΅ΡΡΡ Π»ΠΈ Π΄Π»Ρ ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΠ΅, Π½ΠΎ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡΡΠΉ ΠΌΠ΅Π½Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π½Π° 5 ΡΠ΅ΠΊΡΠ½Π΄Β». ΠΡΠΎΡΠΎΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΡ: Β«ΠΠΎΡ, Π²ΠΎΠ·ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠ΅Β». Π‘Π΅ΡΠ²Π΅Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡΡΡ Π½Π° ΡΠ΅Π±Π΅ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ Π΄Π°Π½Π½ΡΡ , ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ±ΡΠ·Π°Π½ ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ ΡΠ°ΠΉΠΌ-Π°ΡΡΡ. Π’ΡΡ-ΡΠΎ ΠΈ Π½ΡΠΆΠ΅Π½ ΠΈΠΌΠΏΡΠ»ΡΡ; ΠΎΠ½ ΠΈΠ½ΡΠΎΡΠΌΠΈΡΡΠ΅Ρ ΡΠ΅ΡΠ²Π΅Ρ: Β«ΠΡΡΠ΅ΠΊΠ»Π° ΠΎΠ΄Π½Π° ΡΠ΅ΠΊΡΠ½Π΄Π°Β».
Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ Π²ΡΠ³Π»ΡΠ΄Π΅Π»Π° ΠΈΠ·Π»ΠΈΡΠ½Π΅ Π³ΡΠΎΠΌΠΎΠ·Π΄ΠΊΠΎΠΉ, ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠ°Π·Π΄Π΅Π»ΠΎΠ² Ρ ΠΏΡΠ΅ΡΡΠ²Π°Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠ΅ΠΊΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΡΠΌΠΈ. Π‘ΠΊΠ°ΡΠ°ΡΡ ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π° FTP-ΡΠ°ΠΉΡΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ PARSE (ftp://ftp.parseftp.parse.com/pub/book_v3.tar.gz), ΡΠ°ΠΉΠ» Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ time1.Ρ.
ΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΈΠ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΈ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ . Π Π½Π΅ΠΌ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ. ΠΡΡΠ°Π²ΠΈΠΌ ΡΡΠΎ Π±Π΅Π· ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π². :-)
/*
* time1.c
*
* ΠΡΠΈΠΌΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΠΏΠΎΠ»ΡΡΠ°ΡΡΠ΅Π³ΠΎ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
* ΠΎΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ°
* ΠΈ ΠΎΠ±ΡΡΠ½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
*
* ΠΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°ΠΉΠΌΠ΅ΡΠ° Ρ ΠΈΠΌΠΏΡΠ»ΡΡΠ°ΠΌΠΈ.
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <signal.h>
#include <errno.h>
#include <unistd.h>
#include <sys/siginfo.h>
#include <sys/neutrino.h>
// ΠΠΎΠ»ΡΡΠ°Π΅ΠΌΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
// Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
#define MT_WAIT_DATA 2 // Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
#define MT_SEND_DATA 3 // Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
// ΠΠΌΠΏΡΠ»ΡΡΡ
#define CODE_TIMER 1 // ΠΠΌΠΏΡΠ»ΡΡ ΠΎΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ°
// ΠΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
#define MT_OK 0 // Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡ
#define MT_TIMEDOUT 1 // Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡ
// Π‘ΡΡΡΠΊΡΡΡΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
typedef struct {
int messageType; // Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ
// ΠΊΠ»ΠΈΠ΅Π½ΡΡ
int messageData; // ΠΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, Π·Π°Π²ΠΈΡΡΡ ΠΎΡ
// ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
} ClientMessageT;
typedef union {
ClientMessageT msg; // Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ
// Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡΡΠ½ΡΠΌ,
struct _pulse pulse; // Π»ΠΈΠ±ΠΎ ΠΈΠΌΠΏΡΠ»ΡΡΠΎΠΌ
} MessageT;
// Π’Π°Π±Π»ΠΈΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ²
#define MAX_CLIENT 16 // ΠΠ°ΠΊΡΠΈΠΌΡΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ²
// ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ
struct {
int in_use; // ΠΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ?
int rcvid; // ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ
// ΠΎΡΠΏΡΠ°Π²ΠΈΡΠ΅Π»Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
int timeout; // ΠΡΡΠ°Π²ΡΠΈΠΉΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ
//ΡΠ°ΠΉΠΌ-Π°ΡΡ
} clients[MAX_CLIENT]; // Π’Π°Π±Π»ΠΈΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ²
int chid; // ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΊΠ°Π½Π°Π»Π°
// (Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ)
int debug = 1; // Π Π΅ΠΆΠΈΠΌ ΠΎΡΠ»Π°Π΄ΠΊΠΈ, 1 ==
// Π²ΠΊΠ», 0 == Π²ΡΠΊΠ»
char *progname = "time1.c";
// ΠΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΏΡΠΎΡΠΎΡΠΈΠΏΡ
static void setupPulseAndTimer(void);
static void gotAPulse(void);
static void gotAMessage(int rcvid, ClientMessageT *msg);
main()Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π·Π΄Π΅Π» ΠΊΠΎΠ΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΈ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
β’ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ°Π½Π°Π»Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ChannelCreate();
β’ Π²ΡΠ·ΠΎΠ² ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ setupPulseAndTimer() (Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°ΠΉΠΌΠ΅ΡΠ°, ΡΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΠ΅Π³ΠΎ ΡΠ°Π· Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π³ΠΎ ΠΈΠΌΠΏΡΠ»ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΏΠΎΡΠΎΠ±Π° Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΡ;
β’ ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ, Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠΈΠΊΠ» ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΈΠΌΠΏΡΠ»ΡΡΠΎΠ² ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΈ ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ MsgReceive() β Π½ΡΠ»Ρ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ Π±ΡΠ» ΠΏΡΠΈΠ½ΡΡ ΠΈΠΌΠΏΡΠ»ΡΡ (Π·Π΄Π΅ΡΡ ΠΌΡ Π½Π΅ Π΄Π΅Π»Π°Π΅ΠΌ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, Π½Π°Ρ Π»ΠΈ ΡΡΠΎ ΠΈΠΌΠΏΡΠ»ΡΡ), Π½Π΅Π½ΡΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π±ΡΠ»ΠΎ ΠΏΡΠΈΠ½ΡΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅.
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΠΌΠΏΡΠ»ΡΡΠΎΠ² ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ gotAPulse() ΠΈ gotAMessage().
int main void) // ΠΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ
// ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ
{
int rcvid; // PID ΠΎΡΠΏΡΠ°Π²ΠΈΡΠ΅Π»Ρ
MessageT msg; // Π‘Π°ΠΌΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
if ((chid = ChannelCreate(0)) == -1) {
fprintf(stderr, "%s: Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ°Π½Π°Π»!\n",
progname);
perror(NULL);
exit(EXIT_FAILURE);
}
// ΠΠ°ΡΡΡΠΎΠΈΡΡ ΠΈΠΌΠΏΡΠ»ΡΡ ΠΈ ΡΠ°ΠΉΠΌΠ΅Ρ
setupPulseAndTimer();
// ΠΡΠΈΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
for(;;) {
rcvid = MsgReceive(chid, &msg, sizeof(msg), NULL));
// ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΎΡ ΠΊΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
if (rcvid == 0) {
// ΠΠ΄Π΅ΡΡ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ Π±Ρ Π΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΏΠΎΠ»Π΅ Β«codeΒ»...
gotAPulse();
} else {