ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠ΅Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΈΠΌ ΡΠΈΠΌΠ²ΠΎΠ»Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΊΠ°ΡΠ΅ΡΠΊΠΈ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. Π‘Π»ΠΎΠ²ΠΎ "ΡΠΈΡΡΠ΅ΠΌΡ" Π·Π΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ Π±ΡΠΊΠ²Π°Π»ΡΠ½ΠΎ; Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΈΠ½ΡΠ΅Π»Π»Π΅ΠΊΡΡΠ°Π»ΡΠ½ΡΠΌ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΠΉΠ½ΡΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°ΠΌ Π±Π΅ΡΠΏΠ΅ΡΠ΅Π±ΠΎΠΉΠ½ΠΎΠ³ΠΎ ΠΏΠΈΡΠ°Π½ΠΈΡ (UPS) Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΏΠΎΡΡΠ°ΠΌΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² DOS, Π³Π΄Π΅ ΠΏΠ°ΡΠ° "Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΊΠ°ΡΠ΅ΡΠΊΠΈ/ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΡΡΠΎΠΊΠΈ" Π²ΡΠ΅Π³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. Π ΡΡΡΠΎΠΊΠ΅ 228 ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΡΠΎ DOS-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.
228: if (crnl) {
229: /* ΠΏΠΎΡΠ»Π°ΡΡ CR Ρ NL */
230: pts.c_oflag |= ONLCR;
231: }
ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΠ°ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΠΏΡΠΈΠΉ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΊΠΎΡΠΎΡΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π² Π±ΠΈΡΠ°Ρ Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ[111]. ΠΠΌΠ΅ΡΡΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ³ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° Π²ΡΠ±ΠΎΡΠ° ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΠΆΠ΅ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ ΡΠ°Π½Π΅Π΅ ΡΡΠ½ΠΊΡΠΈΡ symbolic_speed(), ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ speed_t, ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌΡΠΉ termios, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΡΡΠΎΠΊΠ΅ 233.
233: /* ΡΠΊΠΎΡΠΎΡΡΡ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΊΠ°Π·Π°Π½ΠΎ -b */
234: if (speed) {
235: cfsetospeed(&pts, symbolic_speed(speed));
236: cfsetispeed(&pts, symbolic_speed(speed));
237: }
ΠΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π½Π°ΡΠΈΡ ΠΊΠΎΠΏΠΈΠΉ ΡΡΡΡΠΊΡΡΡ termios, Π² ΡΡΡΠΎΠΊΠ΅ 241 ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΡΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π΄Π»Ρ Π²Π°ΠΆΠ½ΡΡ ΡΠΈΠ³Π½Π°Π»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΠ·Π²Π°ΡΡ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈ ΠΎΡΡΠ°Π²ΠΈΡΡ tty Π² Π½Π΅ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ΅ΠΌΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ. ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ Π² Π³Π»Π°Π²Π΅ 12.
241: sact.sa_handler = cleanup_termios;
242: sigaction(SIGHUP, &sact, NULL);
243: sigaction(SIGINT, &sact, NULL);
244: sigaction(SIGPIPE, &sact, NULL);
245: sigaction(SIGTERM, &sact, NULL);
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π° ΠΌΠ΅ΡΡΠ΅ Π΄Π»Ρ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΡΠ°ΡΡΡ Π½Π°ΡΡΡΠΎΠ΅ΠΊ termios Π² ΡΠ»ΡΡΠ°Π΅ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΡ robin, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π±Π»Π°Π³ΠΎΠΏΠΎΠ»ΡΡΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ termios.
248: tcsetattr(pf, TCSANOW, &pts);
249: tcsetattr(STDIN_FILENO, TCSANOW, &sts);
ΠΠ° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° robin Π³ΠΎΡΠΎΠ²Π° ΡΠΈΡΠ°ΡΡ ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ. Π£ robin Π΅ΡΡΡ Π΄Π²Π° ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ: Π΄Π°Π½Π½ΡΠ΅ Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ° ΠΈ Π΄Π°Π½Π½ΡΠ΅ Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ. ΠΠ»Ρ ΠΌΡΠ»ΡΡΠΈΠΏΠ»Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅ΡΡΡΡΠΌΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΌΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°ΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ poll() (ΡΠΌ. Π³Π»Π°Π²Ρ 13).
Π¦ΠΈΠΊΠ» poll() Π΄Π΅Π»Π°Π΅Ρ ΡΠΏΡΠΎΡΠ΅Π½ΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΡΡΠΎΠ»ΡΠΊΠΎ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ. ΠΡΠΎ ΠΏΠΎΡΡΠΈ Π²ΡΠ΅Π³Π΄Π° Π²Π΅ΡΠ½ΠΎ ΠΈ Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΡΠΎΡΠΊΠΈΠ΅ ΠΏΠ΅ΡΠΈΠΎΠ΄Ρ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ½ΠΎ ΠΏΡΠΈ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΡΡ . Π¦ΠΈΠΊΠ» Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΠΈΠ· ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°, ΠΏΠΎΠΊΠ° poll() Π½Π΅ ΡΠΎΠΎΠ±ΡΠΈΡ, ΡΡΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ , ΡΡΠΎΠ±Ρ ΠΌΡ Π·Π½Π°Π»ΠΈ, ΡΡΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΡΠ΅Π½ΠΈΡ Π½Π΅Ρ.
ΠΠ»Ρ Π΄Π°Π½Π½ΡΡ , ΠΏΠΎΡΡΡΠΏΠ°ΡΡΠΈΡ Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ, ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΏΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΠΈΡΡΡ, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ Π²ΡΠ±ΡΠ°Π» Π½Π΅ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ΅ΠΌΡΠΉ ΡΠ΅ΠΆΠΈΠΌ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ robin. ΠΠΌΠ΅ΡΡΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² ΡΠΈΠΊΠ» ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ cook_buf() (ΡΡΡΠΎΠΊΠ° 78), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ send_escape() (ΡΡΡΠΎΠΊΠ° 58). ΠΠ±Π΅ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΎΡΡΡ. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΡΡΠΊ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ cook_buf() ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½Π° ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ, Π° Π·Π°ΡΠ΅ΠΌ Π²ΡΠΎΡΠΎΠΉ ΡΠ°Π· Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ, Π° ΡΠ°ΠΊΠΆΠ΅ Π² ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ write().
Π€ΡΠ½ΠΊΡΠΈΡ cook_buf() Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ send_escape() ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π°, ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΠΎΡΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ^\. Π‘ΠΈΠΌΠ²ΠΎΠ» q Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ termios ΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠΈΠ³Π½Π°Π»Π° (Ρ ΡΠ°Π»ΡΡΠΈΠ²ΡΠΌ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ ΡΠΈΠ³Π½Π°Π»Π° 0), ΡΡΠΎ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ termios ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΡ ΠΎΠ΄ΠΎΠΌ. Π‘ΠΈΠΌΠ²ΠΎΠ» b Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ°Π·ΡΡΠ²Π°, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄Π»ΠΈΠ½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ, ΡΠΎΡΡΠΎΡΡΠ΅ΠΉ ΠΈΠ· Π½ΡΠ»Π΅ΠΉ. ΠΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ», Π²ΠΊΠ»ΡΡΠ°Ρ Π²ΡΠΎΡΠΎΠΉ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ^\, ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠΎΡΡ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
ΠΡΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΈΠ· Π²Ρ ΠΎΠ΄Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² Π²Π΅ΡΠ½Π΅Ρ ΠΏΡΠΈΠ·Π½Π°ΠΊ ΠΊΠΎΠ½ΡΠ° ΡΠ°ΠΉΠ»Π°, robin Π²ΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ· ΡΠΈΠΊΠ»Π° poll() ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ, ΡΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΡΠΈΠ³Π½Π°Π»Π°: Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ°ΡΡΡ Π½Π°ΡΡΡΠΎΠ΅ΠΊ termios Π½Π° ΠΎΠ±ΠΎΠΈΡ Π²Ρ ΠΎΠ΄Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² ΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅. Π Π½Π΅ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ΅ΠΌΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π²Π° ΡΠΏΠΎΡΠΎΠ±Π° Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ robin: Π·Π°ΠΊΡΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅ΠΉ ΡΠΈΠ³Π½Π°Π».
16.4. ΠΡΠ»Π°Π΄ΠΊΠ° termios
ΠΡΠ»Π°Π΄ΠΊΠ° ΠΊΠΎΠ΄Π° tty Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΎΡΡΠ°. ΠΠ°ΡΠΈΠ°Π½ΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°ΡΡΡΡ ΠΈ Π²Π»ΠΈΡΡΡ Π΄ΡΡΠ³ Π½Π° Π΄ΡΡΠ³Π° ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ, ΡΠ°ΡΡΠΎ Π½Π΅Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ. ΠΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π»ΠΈΡΡ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ° Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠΎ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°, ΠΊΠΎΡΠΎΡΠΎΠΉ Π²Ρ ΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ ΡΠΏΡΠ°Π²Π»ΡΡΡ, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΡΠ΄ΡΠ΅.
ΠΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΊΠΎΠ΄Π°, ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΠ΅Π³ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠΎΡΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ-ΡΡΠ΅Π½Π°ΡΠΈΡ. ΠΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ robin ΠΌΡ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΠ»ΠΈ Π΄Π²Π° ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΌ ΠΊΠ°Π±Π΅Π»Π΅ΠΌ ΠΈ ΡΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡ, ΡΡΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π·Π°ΠΏΡΡΡΠΈΠ² ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ kermit. Π ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° kermit ΡΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π»Π° Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅, ΠΌΡ Π·Π°ΠΏΡΡΡΠΈΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ-ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π½Π° ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°ΡΠ°Π»Π° ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π² ΡΠ°ΠΉΠ»Π΅. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ Π²ΡΡΠ»ΠΈ ΠΈΠ· kermit ΠΈ Π·Π°ΠΏΡΡΡΠΈΠ»ΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅, ΠΏΠΎΠΌΠ΅ΡΡΠΈΠ² ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» Π² ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π½Π° ΠΌΠ΅ΡΡΠ½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΠΏΠΎΠΏΡΡΠ°Π»ΠΈΡΡ Π·Π°ΠΏΡΡΡΠΈΡΡ robin ΠΏΠΎ ΡΡΠ΅Π½Π°ΡΠΈΡ ΠΈ ΡΡΠ°Π²Π½ΠΈΠ»ΠΈ Π΄Π²Π° ΡΠ°ΠΉΠ»Π° Π² Π½Π°ΡΠ°Π»Π΅ ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠΊΠ°, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΡΡ ΡΠ°Π·Π½ΠΈΡΡ Π² ΡΠΈΠΌΠ²ΠΎΠ»Π°Ρ . Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΡ ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΠΈΡΡ Ρ ΡΡΡΠ΅ΠΊΡΠ°ΠΌΠΈ Π²ΡΠ±ΡΠ°Π½Π½ΡΡ ΠΎΠΏΡΠΈΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ.
ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅ΡΠΎΠ΄ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ stty. ΠΡΠ»ΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²Ρ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π΅ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΡ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ termios, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ stty Π΄Π»Ρ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²Π½Π΅ΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π²ΠΌΠ΅ΡΡΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΠ²ΠΎΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠ»ΠΈ Π²Ρ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Π½Π° /dev/ttyS0 ΠΈ Ρ ΠΎΡΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ»Π°Π³ ECHOCTL, ΠΏΡΠΎΡΡΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΡΠ²ΠΎΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
stty echoctl < /dev/ttyS0
ΠΠΎΠ΄ΠΎΠ±Π½ΡΠΌ ΠΆΠ΅ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΠΎΡΡΠ°:
stty -Π° < /dev/ttyS0
ΠΠ°ΠΊ ΠΎΠ±ΡΡΡΠ½ΡΠ»ΠΎΡΡ ΡΠ°Π½Π΅Π΅, ΡΡΡΠ΄Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½ tty Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ° ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΡΠΊΠ°ΠΆΠ΅Π½ΠΈΡ tty, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°Π΅ΡΡΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡΡΡ ΠΊ ΠΏΡΠΎΡΠ΅ΡΡΡ. ΠΡΠΎ Π½Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎ. Π ΠΎΠ΄Π½ΠΎΠΌ ΡΠ΅Π°Π½ΡΠ΅ X-ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π° (Π΄Π΅Π»Π°ΠΉΡΠ΅ ΡΡΠΎ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ X Window, ΡΡΠΎΠ±Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π²ΠΈΠ΄Π΅ΡΡ ΠΎΠ±Π° tty) Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΠ΅ΡΡ ΠΎΡΠ»Π°Π΄ΠΈΡΡ. Π ΡΠ»ΡΡΠ°Π΅ Π½Π°Π΄ΠΎΠ±Π½ΠΎΡΡΠΈ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ Π΅Π΅ Π² Π΄ΠΎΠ»Π³ΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π² ΡΠΎΡΠΊΠ΅, Π³Π΄Π΅ Π²Ρ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΠ΅ΡΡ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡΡΡ ΠΊ ΠΏΡΠΎΡΠ΅ΡΡΡ:
$ ./robin -b 38400 /dev/ttyS1
Π’Π΅ΠΏΠ΅ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠ΅Π°Π½ΡΠ° X-ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π° Π½Π°ΠΉΠ΄ΠΈΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ ΠΎΡΠ»Π°Π΄ΠΈΡΡ, ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π΄Π²ΡΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ²:
$ ps | grep robin
30483 ? S 0:00 ./robin - b 38400 /dev/ttyS1
30485 ? S 0:00 grep robin
$ pidof robin
30483
ΠΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π½ΡΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ pidof, Π½ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅. ΠΠ°ΠΏΠΎΠΌΠ½ΠΈΡΠ΅ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠΉ Π½ΠΎΠΌΠ΅Ρ (Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ 30483) ΠΈ Π½Π°ΡΠ½ΠΈΡΠ΅ ΠΎΠ±ΡΡΠ½ΡΠΉ ΡΠ΅Π°Π½Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ.
$ gdb robin 30483
GDB is free software...
...
Attaching to program '... /robin', process 30483
Reading symbols from...
0x40075d88 in sigsuspend()
ΠΠ°Π»Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΡΠΎΡΠΊΠΈ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ»Π΅ΠΆΠ΅Π½ΠΈΡ, ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
16.5. Π‘ΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ ΠΏΠΎ termios
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ termios ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΡΡΡΠΊΡΡΡΡ, Π½Π°Π±ΠΎΡΠ° ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΎΠΏΠ΅ΡΠΈΡΡΡΡΠΈΡ Ρ Π½Π΅Ρ, ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠ»Π°Π³ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈΡΠ½ΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ.
#include <termios.h>
struct termios {
tcflag_t c_iflag; /* ΡΠ»Π°Π³ΠΈ ΡΠ΅ΠΆΠΈΠΌΠ° Π²Π²ΠΎΠ΄Π° */
tcflag_t c_oflag; /* ΡΠ»Π°Π³ΠΈ ΡΠ΅ΠΆΠΈΠΌΠ° Π²ΡΠ²ΠΎΠ΄Π° */
tcflag_t c_cflag; /* ΡΠ»Π°Π³ΠΈ ΡΠΏΡΠ°Π²Π»ΡΡΡΠ΅Π³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ° */ tcflag_t c_lflag; /* ΡΠ»Π°Π³ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ° */
cc_t c_line; /* Π΄ΠΈΡΡΠΈΠΏΠ»ΠΈΠ½Π° Π»ΠΈΠ½ΠΈΠΈ ΡΠ²ΡΠ·ΠΈ */
cc_t c_cc[NCCS]; /* ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ */
};
ΠΠ»Π΅ΠΌΠ΅Π½Ρ c_line ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π»ΠΈΡΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ [112], Π²ΡΡ ΠΎΠ΄ΡΡΠΈΡ Π·Π° ΡΠ°ΠΌΠΊΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π° Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈΠΌΠ΅ΡΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠΈ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΡΠΈΡΡΠ°ΡΠΈΡΠΌ, ΡΡΠ΅Π±ΡΡΡΠΈΠΌ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°.
16.5.1. Π€ΡΠ½ΠΊΡΠΈΠΈ
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ termios ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΡΠ΅ ΠΎΠ½ΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ Π² <termios.h>. Π§Π΅ΡΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡΠΈΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΠ³ΠΎ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΡΡΠΊΡΡΡΠΎΠΉ struct termios; ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ. Π€ΡΠ½ΠΊΡΠΈΠΈ, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠ΅ΡΡ Ρ cf, ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡΠΈΠΌΠΈ, Π° ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠ΅ΡΡ Ρ tc β ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌΠΈ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΎΠΌ. ΠΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΎΠΌ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡ SIGTTOU, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² ΡΠΎΠ½Π΅ ΠΈ ΠΏΡΡΠ°Π΅ΡΡΡ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΈΠΌ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΌ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΎΠΌ (ΡΠΌ. Π³Π»Π°Π²Ρ 15).
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΠΆΠ΅ Π±ΡΠ»ΠΎ ΠΎΡΠΌΠ΅ΡΠ΅Π½ΠΎ, ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ 0 Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅Ρ Π° ΠΈ -1 ΠΏΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ΅. ΠΡΠ·ΠΎΠ²Ρ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΎΠΌ, ΠΎΠΏΠΈΡΠ°Π½Ρ Π½ΠΈΠΆΠ΅.