ÇöÀç°Á : UNIX BSD ¼ÒÄÏ ½Ã½ºÅÛ ÄÝ
´ÙÀ½: 3.2 ÅäÅ© ¼¹ö ÇÁ·Î±×·¥
3.1
ÅäÅ© Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥
3.1.1 ÇÁ·Î±×·¥ ÁÖ¿äºÎºÐ ¼³¸í
- ÅäÅ© Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥
talk_client.c´Â »ç¿ëÀÚÀÇ Å°º¸µå ÀÔ·Â󸮿Í
¼¹ö¿ÍÀÇ Åë½Å µÎ °¡Áö ÀÏÀ» µ¿½Ã¿¡
¼öÇàÇØ¾ß Çϴµ¥ À̸¦ À§ÇØ fork() ½Ã½ºÅÛ
ÄÝÀ» »ç¿ëÇØ µÎ °³ÀÇ ÇÁ·Î¼¼½º¸¦ »ý¼ºÇÑ´Ù.
- ºÎ¸ð ÇÁ·Î¼¼½º´Â »ç¿ëÀÚ°¡
ÀÔ·ÂÇÑ ¸Þ½ÃÁö¸¦ ÀÐ¾î ¼¹ö·Î Àü¼ÛÇÏ°í
ÀÚ½Ä ÇÁ·Î¼¼½º´Â ¼¹ö°¡ Àü¼ÛÇÑ ¸Þ½ÃÁö¸¦
¼ÒÄÏ¿¡¼ Àоî ȸ鿡 Ãâ·ÂÇÑ´Ù.
- ÇÑÆí »ç¿ëÀÚÀÇ Å°º¸µå
ÀÔ·ÂÀ» ¹Þ±â À§ÇØ readline() ÇÔ¼ö¸¦ »õ·Î
Á¤ÀÇÇÏ¿´´Âµ¥ readline()Àº ù¹ø° ÀÎÀÚ·Î
ÁÖ¾îÁø ÆÄÀϱâ¼úÀڷκÎÅÍ '\n'ÀÌ ³ª¿Ã
¶§±îÁö ¸Þ½ÃÁö¸¦ ÀÐ¾î ¹öÆÛ¿¡ ÀúÀåÇÑ´Ù.
readline() ÇÔ¼ö¿¡¼´Â Å°º¸µå ÀÔ·ÂÀ» À§ÇÏ¿©
Ç¥ÁØÀԷ¿ë ÆÄÀϱâ¼úÀÚ 0À» »ç¿ëÇÑ´Ù.
- ÇÑÆí »ç¿ëÀÚ°¡ Á¾·á¹®ÀÚ(escape
char)¸¦ ÀÔ·ÂÇÏ¸é ºÎ¸ð ÇÁ·Î¼¼½º°¡ ÀÚ½Ä
ÇÁ·Î¼¼½º¸¦ Á¾·á½ÃÅ°°í ÇÁ·Î±×·¥À»
Á¾·á½ÃÅ°µµ·Ï ÇÏ¿´´Ù.
- º» ¿¹Á¦¿¡¼´Â Á¾·á¹®ÀÚ·Î
'exit'¸¦ »ç¿ëÇÏ¿´´Ù. ¾Æ·¡´Â ÀÌ ºÎºÐÀ»
¼öÇàÇÏ´Â ÄÚµåÀε¥ ÀÔ·ÂµÈ ¹®ÀÚ¿(sendline)ÀÌ
Á¾·á¹®ÀÚ(Áï, 'exit')¿Í °°ÀºÁö strncmp()¸¦
ÀÌ¿ëÇÏ¿© ºñ±³ÇÏ°í ÀÖ´Ù.
if(strncmp(sendline,
escapechar, 4) == 0) { kill(pid,
SIGQUIT);
break;
}
|
¢º talk_client.c ÇÁ·Î±×·¥ ¸®½ºÆ®
¢º readline.c ÇÁ·Î±×·¥ ¸®½ºÆ®
- readline.c ´Â ÁÖ¾îÁø ÆÄÀϱâ¼úÀÚ fd·ÎºÎÅÍ
'\n'ÀÌ ³ªÅ¸³¯ ¶§±îÁö Áï, ÇÑ ÇàÀ» Àоî
µéÀÌ´Â »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö readline()À¸·Î,
ÀÐÀº ¸Þ½ÃÁö¸¦ ÇÔ¼ö ÀÎÀÚ·Î ÁÖ¾îÁø ¹®ÀÚ¿
*ptr¿¡ ÀúÀåÇÏ°í ÀÐÀº ¹®ÀÚÀÇ ¼ö¸¦ ¹ÙÀÌÆ®
´ÜÀ§·Î ¸®ÅÏÇÑ´Ù.
- ÇÑÆí, ÀÎÀÚ maxlenÀº ÇÑ ¹ø¿¡
ÀÐÀ» ¼ö ÀÖ´Â ÃÖ´ë ¹®ÀÚ¿ÀÇ Å©±â¸¦
ÁöÁ¤ÇÑ´Ù.
ÇöÀç°ÁÂ :
UNIX BSD ¼ÒÄÏ ½Ã½ºÅÛ ÄÝ
´ÙÀ½: 3.2 ÅäÅ© ¼¹ö ÇÁ·Î±×·¥