Äڵ带 µð¹ö±ëÇÏ´Â °¡Àå ÁÁÀº ¹æ¹ýÀº ¶Ç ÇϳªÀÇ ¸®´ª½º ¹Ú½º¸¦ ¼Â¾÷ÇÏ°í µÎ ¸®´ª½º ¹Ú½º¸¦ null-modem ÄÉÀ̺í·Î ¿¬°áÇÏ´Â °ÍÀÌ´Ù. Miniterm ÇÁ·Î±×·¥À» ÀÌ¿ëÇÏ¿© ¹®ÀÚµéÀ» Àü¼ÛÇغ¸¶ó. MinitermÀº ÄÄÆÄÀÏÇϱ⵵ ½±°í, Å°º¸µå¿¡¼ ÀԷµǴ ¹®ÀÚµé(Ư¼ö¹®ÀÚ Æ÷ÇÔ)À» ½Ã¸®¾ó Æ÷Æ®·Î Àü¼ÛÇÒ ¼ö ÀÖ´Ù. ÄÄÆÄÀÏÇÒ ¶§ üũÇØ¾ß ÇÒ °ÍÀº
#define MODEMDEVICE "/dev/ttyS0"
¹®ÀåÀÌ Á¦´ë·Î ¼³Á¤µÇ¾î Àִ°¡ ÇÏ´Â °ÍÀÌ´Ù. COM1À¸·Î ¸ÂÃß·Á¸é
/dev/ttyS0
, COM2·Î ÇÏ·Á¸é /dev/ttyS1
À¸·Î ¼öÁ¤ÇÑ´Ù.
Å×½ºÆÃÀ» ÇÒ ¶§ °¡Àå Áß¿äÇÑ °ÍÀº ¹®ÀÚ°¡ ½Ã¸®¾ó Æ÷Æ®·Î Ãâ·ÂµÉ ¶§
µ¥ÀÌÅÍ°¡ Ãâ·Â µ¥ÀÌÅÍ Ã³¸®(output processing)À» ÇÏÁö ¾Ê°í
±×´ë·Î(raw) Àü¼ÛÀÌ µÇ´Â°¡¸¦ È®ÀÎÇÏ´Â °ÍÀÌ´Ù. Å×½ºÆ® °úÁ¤Àº ´ÙÀ½°ú
°°´Ù. µÎ ´ëÀÇ ¸®´ª½º ¹Ú½º¿¡¼ °¢°¢ miniterm ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ°°í Å°º¸µå¸¦
Ãĺ»´Ù. ÇÑ °÷¿¡¼ ŸÀÌÇÎÇÑ ¹®ÀÚ°¡ ´Ù¸¥ °÷¿¡¼ ±×´ë·Î ³ªÅ¸³ª´Â Áö È®ÀÎÇÑ´Ù.
Null-modem ÄÉÀ̺íÀÇ TxD¿Í RxD°¡ ¼·Î cross ¿¬°áÀÌ µÇ¾î¾ß ÇÑ´Ù. Àß ¸ð¸£°ÚÀ¸¸é Serial-HOWTO ¹®¼ÀÇ 7ÀåÀ» º»´Ù.
À§ÀÇ Å×½ºÆ®´Â ÇÑ ´ëÀÇ ÄÄÇ»Å͸¸ °®°íµµ °¡´ÉÇÏ´Ù. »ç¿ëÇÒ ¼ö ÀÖ´Â ½Ã¸®¾ó Æ÷Æ®°¡ µÎ °³ ÀÖ´Ù¸é ÄÉÀ̺íÀ» °¢°¢ÀÇ ½Ã¸®¾ó Æ÷Æ®¿¡ ¿¬°áÇÏ°í minitermÀ» µÎ °³ ½ÇÇàÇÏ¿© Å×½ºÆ®ÇÏ¸é µÈ´Ù.
ÀåÄ¡ ÆÄÀÏÀÎ /dev/ttyS*
´Â ¸®´ª½º¿¡¼ Å͹̳ÎÀ» ¿¬°áÇϱâ À§ÇÑ
¸ñÀûÀ¸·Î »ç¿ëµÈ´Ù. ÀÌ »ç½ÇÀº ½Ã¸®¾ó Åë½Å ÇÁ·Î±×·¡¹ÖÀ» Çϴµ¥
¹Ýµå½Ã ±â¾ïÇØ¾ß ÇÒ »çÇ×ÀÌ´Ù. ¿¹¸¦ µé¾î, ½Ã¸®¾ó Æ÷Æ®µµ ¹®ÀÚ ¿¡ÄÚ¸¦
Çϵµ·Ï ¼³Á¤µÇ¾î ÀÖ´Ù. ÀÌ ¼³Á¤Àº º¸Åë µ¥ÀÌÅÍ Àü¼Û½Ã¿¡ ¹Ù²ã¾ß ÇÒ »çÇ×ÀÌ´Ù.
(¿ªÀÚ ÁÖ: ½Ã¸®¾ó ÀåÄ¡ ÆÄÀϵµ Å͹̳ΠÀåÄ¡·Î ºÐ·ùµÇ±â ¶§¹®¿¡ Ãʱ⠼³Á¤Àº
ÀÏ¹Ý Å͹̳ο¡¼ »ç¿ëµÇ´Â ¿¡ÄÚ°¡ µÇµµ·Ï ¼³Á¤µÇ¾î ÀÖ´Â °ÍÀÌ´Ù.)
¸ðµç ÆĶó¹ÌÅ͵éÀº ÇÁ·Î±×·¥ Äڵ忡¼ ½±°Ô ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ÆĶó¹ÌÅ͵éÀº
<asm/termbits.h>
¿¡ Á¤ÀǵǾî ÀÖ´Â struct termios
±¸Á¶Ã¼¿¡ ÀúÀåµÇ¾î ÀÖ´Ù.
#define NCCS 19 struct termios { tcflag_t c_iflag; /* input mode flags */ tcflag_t c_oflag; /* output mode flags */ tcflag_t c_cflag; /* control mode flags */ tcflag_t c_lflag; /* local mode flags */ cc_t c_line; /* line discipline */ cc_t c_cc[NCCS]; /* control characters */ };
ÀÌ ÆÄÀÏÀº ¸ðµç flagµéÀ» Á¤ÀÇÇÏ°í ÀÖ´Ù. c_iflag
(ÀÔ·Â ¸ðµå flag)´Â
¸ðµç ÀԷ ó¸®(input processing)¸¦ Á¤ÀÇÇÑ´Ù.
ÀԷ ó¸®¶õ read()
ÇÔ¼ö¿¡ ÀÇÇØ ½Ã¸®¾ó Æ÷Æ®·Î µé¾î¿Â µ¥ÀÌÅ͸¦
read
¿¡ ÀÇÇØ Àбâ Àü¿¡ µ¥ÀÌÅ͵éÀ» c_iflag
¿¡
Á¤ÀÇÇÑ ´ë·Î ó¸®ÇÏ´Â °ÍÀ» ÀǸ¶ÇÑ´Ù. c_oflag
(Ãâ·Â ¸ðµå flag)´Â
Ãâ·Â ó¸®(output processing) ÇÏ´Â ¹æ¹ýÀ» Á¤ÀÇÇÑ´Ù.
c_cflag
(Á¦¾î ¸ðµå flag)´Â baudrate, data bits, stop bits µîÀÇ
Æ÷Æ® ¼¼ÆÃÀ» Á¤ÀÇÇÑ´Ù. c_lflag
(local ¸ðµå flag)´Â echo¸¦
ÇÒ °ÍÀÎÁö µîÀ» °áÁ¤ÇÑ´Ù. ¸¶Áö¸·À¸·Î c_cc
(Á¦¾î ¹®ÀÚ) ¹è¿Àº
EOF(End of File), STOP µîÀÇ Á¦¾î µ¿ÀÛµéÀ»
¾î¶² ¹®ÀÚ·Î Á¤ÀÇÇÒ °ÍÀΰ¡¸¦ ¼³Á¤ÇÑ´Ù. Á¦¾î ¹®ÀÚÀÇ µðÆúÆ® ¹®ÀÚ´Â
<asm/termios.h>
¿¡ Á¤ÀǵǾî ÀÖ´Ù. À§ flagµé¿¡ °üÇÑ ¼³¸íÀº
termios(3)
man page¿¡ ³ª¿ÍÀÖ´Ù. termios
±¸Á¶Ã¼ÀÇ
c_line
Ç׸ñÀº POSIX ȣȯ ½Ã½ºÅÛ¿¡¼ »ç¿ëµÇÁö ¾Ê´Â´Ù.
ÀÌ ¼½¼Ç¿¡¼´Â ¼¼ °¡ÁöÀÇ ÀÔ·Â ¹æ¹ýÀ» ±â¼úÇϱâ·Î ÇÑ´Ù. ÀÀ¿ë ºÐ¾ß¿¡ µû¶ó¼ ¾Ë¸ÂÀº ¹æ¹ýÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. ÇÑ ¹®ÀÚ¾¿ Àд ·çÇÁ¸¦ µ¹·Á¼ Àüü ¹®ÀÚ¿À» ¹Þ´Â ¹æ¹ýÀº °¡´ÉÇÏ´Ù¸é ÇÇÇØ¾ß ÇÑ´Ù. ³»°¡ ÀÌ·± ¹æ¹ýÀ¸·Î ÇßÀ» ¶§, ¹®ÀÚ¸¦ ÀÒ¾î¹ö¸®´Â °æ¿ì°¡ »ý±ä ¹Ý¸é, Àüü ¹®ÀÚ¿À» Çѹø¿¡ ÀÐÀ» ¶§´Â ¿¡·¯°¡ ¹ß»ýÇÏÁö ¾Ê¾Ò´Ù.
Canonical ÀԷ ó¸®´Â Å͹̳ÎÀÇ ±âº» ó¸® ¹æ¹ýÀÌ´Ù. ÀÌ ¹æ¹ýÀº ÇÑ ÁÙ ´ÜÀ§·Î
ó¸®ÇÏ´Â ´Ù¸¥ ÇÁ·Î±×·¥°ú Åë½ÅÇϴµ¥¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
ÇÑ ÁÙÀº µðÆúÆ®·Î NL
(New Line, ASCII´Â LF
) ¹®ÀÚ,
EOF(End of File) ¹®ÀÚ, ȤÀº EOL(End of Line)¿¡ ÀÇÇØ Á¾·áµÇ´Â
¹®ÀÚ¿À» ÀǹÌÇÑ´Ù. CR
(Carriage Return, DOS/WindowsÀÇ
µðÆúÆ® EOL ¹®ÀÚÀÓ) ¹®ÀÚ´Â µðÆúÆ® ¼¼Æÿ¡¼ ÇÑ ÁÙÀÇ Á¾·á ¹®ÀÚ·Î
ÀνĵÇÁö ¾Ê´Â´Ù.
¶ÇÇÑ Canonical ÀԷ ó¸® ¸ðµå¿¡¼´Â ERASE, DELETE WORD, REPRINT CHARACTERS
¹®ÀÚµéÀ» ó¸®ÇÒ ¼ö ÀÖ°í, CR
¹®ÀÚ¸¦ NL
¹®ÀÚ·Î
º¯È¯ 󸮸¦ ÇÒ ¼ö ÀÖ´Ù.
Non-Canonical ÀԷ ó¸® ¸ðµå¿¡¼´Â ÇÑ ¹ø ÀÐÀ» ¶§¸¶´Ù Á¤ÇØÁø Å©±âÀÇ ¹®ÀÚ¸¸À»
Àо ¼ö ÀÖ´Ù. ¶ÇÇÑ Å¸À̸Ӹ¦ µÎ¾î¼ ÀÏÁ¤ ½Ã°£±îÁö read()
°¡
¸®ÅÏÇÏÁö ¾Ê´Â °æ¿ì °Á¦ ¸®ÅÏÀ» ÇÒ ¼ö ÀÖ´Ù. ÀÌ ¸ðµå´Â Ç×»ó Á¤ÇØÁø
Å©±âÀÇ ¹®Àڵ鸸À» Àо°Å³ª ´ë·®ÀÇ ¹®ÀÚµéÀ» Àü¼ÛÇÏ°íÀÚ ÇÒ ¶§ »ç¿ëÇÑ´Ù.
À§¿¡¼ ¼³¸íÇÑ µÎ °¡Áö ¸ðµå´Â µ¿±â ¹æ½ÄÀ̳ª ºñµ¿±â ¹æ½ÄÀ¸·Î
»ç¿ëµÉ ¼ö ÀÖ´Ù. µ¿±â ¹æ½ÄÀº read
ÀÇ Á¶°ÇÀÌ ¸¸Á·µÉ ¶§±îÁö
blockµÇ´Â ¹æ½ÄÀ¸·Î¼ µðÆúÆ®·Î ¼³Á¤µÇ¾î ÀÖ´Ù. ºñµ¿±â ¹æ½Ä¿¡¼´Â
read()
ÇÔ¼ö°¡ ¹Ù·Î ¸®ÅϵǸç, È£ÃâÇÑ ÇÁ·Î±×·¥¿¡°Ô
signalÀ» º¸³½´Ù. ÀÌ signalÀº signal handler(½Ã±×³Î ó¸® ÇÔ¼ö)·Î
º¸³»Áø´Ù.
À§¿¡¼ ¼³¸íÇÑ ÀÔ·Â ¸ðµå¿¡ ÇØ´çÇÏÁø ¾ÊÁö¸¸ ¿©·¯ °³ÀÇ ÀåÄ¡µéÀ» ´Ù·ç°íÀÚ ÇÒ ¶§ À¯¿ëÇÏ´Ù. ¿¹¸¦ µé¾î ³» ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ TCP/IP ¼ÒÄÏ°ú ½Ã¸®¾ó Åë½Å¿¡¼ µ¿½Ã¿¡ ÀÔ·ÂÀ» ¹Þ¾Æ¾ß Çß´Ù. ¾Æ·¡ 3.4ÀÇ ¿¹Á¦´Â µÎ °³ÀÇ ¼·Î ´Ù¸¥ ÀåÄ¡·ÎºÎÅÍ µ¿½Ã¿¡ ÀÔ·ÂÀ» ±â´Ù¸®´Â ÄÚµåÀÌ´Ù. µÑ Áß ÇÑ °³ÀÇ ÀåÄ¡¿¡¼ ÀÔ·ÂÀÌ µé¾î¿À¸é 󸮸¦ ÇÏ°í ¶Ç ´Ù½Ã »õ·Î¿î ÀÔ·ÂÀÌ ¿Ã ¶§±îÁö ±â´Ù¸°´Ù.
¾Æ·¡ 3.4ÀÇ ¿¹Á¦´Â º¹ÀâÇØ º¸ÀÏ ¼ö ÀÖÁö¸¸, ¸®´ª½º°¡ multi-processing OSÀÓÀ»
¾Ë°í Àֱ⿡ ¸Å¿ì Áß¿äÇÏ´Ù. select()
½Ã½ºÅÛ È£Ãâ ÇÔ¼ö´Â ÀÔ·ÂÀ»
±â´Ù¸®´Â µ¿¾È CPU¿¡ ºÎÇϸ¦ ÁÖÁö ¾Ê´Â´Ù. ¹Ý¸é ÀÔ·ÂÀÌ µé¾î¿Ô´ÂÁö
·çÇÁ¸¦ µ¹¸é¼ üũÇÏ´Â polling ¹æ½ÄÀº ½Ã½ºÅÛ¿¡ ºÎÇϸ¦ ÁÖ°Ô µÇ¾î
´Ù¸¥ ÇÁ·Î¼¼½ºÀÇ ¼öÇà ¼Óµµ¸¦ ÀúÇϽÃÅ°°Ô µÈ´Ù.