ÆÄÀϰ´Ã¼¿Í ÆÄÀÏÁö½ÃÀÚ ºñ±³
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

FILE °´Ã¼¿Í ÆÄÀÏÁö½ÃÀÚ ¿ÍÀÇ Â÷ÀÌÁ¡.. ½Ã½ºÅÛ ÇÁ·Î±×·¥ ÆÄÀϰü·Ã ÀÛ¾÷À» ÇÒ¶§, ¿ì¸®´Â int ÇüÀÇ ÆÄÀÏÁö½ÃÀÚ °ªÀ» µ¹·ÁÁÖ ´Â open °è¿­ ÇÔ¼ö¿Í FILE °´Ã¼¸¦ µ¹·ÁÁÖ´Â fopen °è¿­ÇÔ¼öÁß ÅÃÀÏ ÇÏ¿© »ç¿ëÇÑ´Ù. À̹øÀå¿¡¼­´Â fopen °è¿­ ÇÔ¼ö¿Í open °è¿­ ÇÔ¼ö¿ÍÀÇ Â÷ÀÌÁ¡ÀÌ ¹«¾ùÀ̰í, ¾î¶°ÇÑ ÀåÁ¤°ú ´ÜÁ¡À» °¡Áö´ÂÁö¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ. ±âº»ÀûÀ¸·Î À¯´Ð½º¿¡¼­´Â ¸ðµç °ÍÀ» ÆÄÀϷΠó¸®ÇѴٴ°Ϳ¡ ´ëÇØ»ç ¾Ë°í ÀÖÀ» °ÍÀÌ´Ù. ÀÌ´Â ¸ðµç Ç¥ÁØÀÔÃâ·Â Ç¥ÁØ¿¡·¯, ÆÄÀÏ, ¼ÒÄÏ¿¡µî¿¡µµ µ¿ÀÏÇÏ°Ô Àû¿ëµÈ´Ù.
´ÙÀ½Àº zipcodeÀÇ fork ¹öÁ¯À» 4444 ¹ø port ·Î ½ÇÇà½Ã۰í, zipcode ÀÇ ÇÁ·Î¼¼½º »óȲÀ» Ãâ·ÂÇÑ °á°ú ÀÌ´Ù.
zipcode ÀÇ fork ¹öÁ¯Àº ´ÙÁß¿¬°á¼­¹ö ¸¸µé±â (1)ÀÇ ¼­¹öÇÁ·Î±×·¥ÀÌ´Ù.
[yundream@coco test]$ ./zipcode_m 
Usage : ./zipcode [port]
¿¹    : ./zipcode 4444
[yundream@coco test]$ ./zipcode_m 4444
À§¿Í °°ÀÌ ¼­¹öÇÁ·Î±×·¥À» ½ÇÇà½Ã۰í /proc ÆÄÀϽýºÅÛÀ» ÀÌ¿ëÇØ¼­ zipcode_m ÀÇ ÇÁ·Î¼¼½º Á¤º¸Áß fd Á¤º¸¸¦ Ãâ·ÂÇØ º¸¾Ò´Ù.
[yundream@hum test]$ ps -aux | grep zipcode_m | grep -v grep 
yundream 14987  0.0  0.2  1340  376 ttyq1    S    15:02   0:00 ./zipcode_m 4444
[yundream@hum test]$ cd /proc/14987/fd ; ls -al
ÇÕ°è 0
dr-x------    2 yundream 500             0  3¿ù 18 15:15 .
dr-xr-xr-x    3 yundream 500             0  3¿ù 18 15:15 ..
lrwx------    1 yundream 500            64  3¿ù 18 15:15 0 -> /dev/ttyq1
lrwx------    1 yundream 500            64  3¿ù 18 15:15 1 -> /dev/ttyq1
lrwx------    1 yundream 500            64  3¿ù 18 15:15 2 -> /dev/ttyq1
lr-x------    1 yundream 500            64  3¿ù 18 15:15 3 -> /home/mycvs/test/zipcode.txt
lrwx------    1 yundream 500            64  3¿ù 18 15:15 4 -> socket:[587641]
[yundream@hum fd]$ 
À§À§ È­¸éÀ» º¸¸é ¾Ë°ÚÁö¸¸, Ç¥ÁØÀÔ·Â(0), Ç¥ÁØÃâ·Â(1), Ç¥ÁØ¿¡·¯(2), ¿­¸°ÆÄÀÏ(3), ¿­¸° ¼ÒÄÏ(4) ¿¡ ´ëÇØ¼­ ÀÏ·ÃÀÇ ¼ýÀÚ·ÎµÈ link ÆÄÀÏÀÌ ¸¸µé¾îÁö´Â°É º¼¼ö ÀÖÀ»°ÍÀÌ´Ù.
Ç¥ÁØÀÔ·Â,Ãâ·Â,¿¡·¯´Â ÀÚ½ÅÀÇ Å͹̳ÎÀ» ¸µÅ©Çϰí ÀÖÀ¸¸ç ¿­¸°ÆÄÀÏÀº ÆÄÀÏ, ¼ÒÄÏÀº °íÀ¯ÀÇ ¼ÒÄϹøÈ£¸¦ ¸µÅ©Çϰí ÀÖÀ½À» ¾Ë¼ö ÀÖ´Ù.
INET(ÀÎÅͳÝ) ¼ÒÄÏÀÇ °æ¿ì¿¡´Â ¼ÒÄÏÅë½ÅÀ» À§Çؼ­ ÆÄÀÏÀ» »ý¼ºÇÏÁö ¾Ê°í Ä¿³Î¿¡¼­ Á÷Á¢°ü¸® ÇϹǷÎ, INET ¼ÒÄÏÀÇ °æ¿ì ¸µÅ©°¡ ÆÄÀÏ·Î ¿¬°áµÇÁö ¾Ê°í, Ä¿³ÎÀÇ ¼ÒÄϰü¸® ¹øÈ£¿¡ ¿¬°áµÈ´Ù´Â Á¡À» ÁÖÀÇ ÇÏÀÚ

Å×½ºÆ®µµ ÇÒ°â 0 ¹øÆÄÀÏ¿¡ ¾²±â¸¦ ÇѹøÇغ¸ÀÚ.
[yundream@hum fd]$  echo "111" > 0
[yundream@coco test]$ ./zipcode_m 4444
111
±×·¯¸é ./zipcode_m À» ½ÇÇàÇѰ÷¿¡ 111 ÀÌ Ãâ·Â µÊÀ» º¼¼ö ÀÖÀ»°ÍÀÌ´Ù.

open °è¿­
¿ì¸®°¡ ÈçÈ÷ »ç¿ëÇÏ´Â open °è¿­ÀÇ ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é ¹Ù·Î /proc/pid/fd ¹Ø¿¡ ÀÖ´Â ¸µÅ©ÆÄÀÏÀÇ À̸§À» int ÇüÀ¸·Î º¯È¯½ÃÄѼ­ µÇµ¹·ÁÁÖ¸ç, À̰ªÀ» ÀÌ¿ëÇØ¼­ ¿ì¸®´Â ¿©·¯°¡Áö ÀÔÃâ·Â ÀÛ¾÷À» ÇÒ¼ö ÀÖ°Ô µÇ´Â°ÍÀÌ´Ù.
¸ðµç ÀÔÃâ·ÂÀ» ÆÄÀÏ·Î ÀϰüµÇ°Ô ó¸®ÇÒ¼ö ÀÖÀ¸¸ç, ÇÁ·Î±×·¡¹Ö ÀÎÅÍÆäÀ̽º¿Í /proc ÆÄÀÏÀÇ ÀÎÅÍÆäÀ̽º°¡ ¼­·Î µ¿ÀÏÇÏ°Ô ¿¬°áµÇ¾î¼­ »ç¿ëµÈ´Ù.
¸Å¿ì È¿À²ÀûÀÌ°í Æí¸®ÇÑ ÀÔÃâ·Âȯ°æÀ» Á¦°øÇØÁØ´Ù´Â°É ´À³¥¼ö ÀÖÀ»°ÍÀÌ´Ù.

ÀÌó·³ open °è¿­À» »ç¿ëÇÏ¸é °¢°¢ÀÇ ÀÔÃâ·Â ÆÄÀÏÀ» Á÷Á¢ ¿¢¼¼½º ÇÒ¼ö ÀÖÀ¸¹Ç·Î, Àú¼öÁØÀÇ ÀÛ¾÷, ¿¹¸¦µé¸é select, polling, ÆÄÀÏÀá±Ý, ·¹ÄÚµåÀá±Ý, ÆÄÀϼӼºº¯°æµîÀÇ ÆÄÀÏÀ» ´Ù·ç±â À§ÇÑ ¼¼¼¼ÇÑ ÀϵéÀ» ÇÒ¼ö ÀÖ´Â ÀåÁ¡À» ¾ò°Ô µÈ´Ù.
¹Ý¸é ´ÜÁ¡À» °¡Áö´Âµ¥, Àú¼öÁØÀ¸·Î ÆÄÀÏÀ» ´Ù·ç´Ù º¸´Ï °£´ÜÇÑ ÀÏÀ» Çұ⿡´Â ³Ê¹« ÀܼÕÀÌ ¸¹ÀÌ °£´Ù¶ó´Â Á¡ÀÌ´Ù.
°£´ÜÇÑ ÇàÀÔ·ÂÀ» ¹Þ´Â ÇÁ·Î±×·¥À» ¸¸µç´Ù°í »ý°¢Çغ¸ÀÚ, open À» »ç¿ëÇÏ°Ô µÇ¸é °³Ç๮ÀÚ °Ë»ç¸¦ À§Çؼ­ ÀԷ¹ÞÀº ¹®ÀÚ¸¦ ¹ÙÀÌÆ®´ÜÀ§·Î ºñ±³¸¦ ÇØÁÖ´Â ¼ö°í½º·¯¿òÀ» °¨¼öÇØ¾ß Çϸç, º°µµ·Î ¹öÆÛ °ü¸®¸¦ ÇØÁÖ¾î¾ß ÇÒ°ÍÀÌ´Ù.

fopen °è¿­
ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°áÇϱâ À§Çؼ­(¹Ýµå½Ã À§ÀÇ ¹®Á¦¶§¹®¿¡ ³ª¿Â°Í ¸¸Àº ¾Æ´ÏÁö¸¸), f°è¿­ ÀÇ Á»´õ °í¼öÁØÀÇ ÇÔ¼öµéÀ» Á¦°øÇÑ´Ù.
f °è¿­ÇÔ¼öµéÀº ÆÄÀÏÀ» "FILE" °´Ã¼¸¦ ÀÌ¿ë ÇØ¼­ ´Ù·ç°Ô µÈ´Ù. FILE °´Ã¼´Â fopen ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ ÆÄÀÏ¿­±â¿¡ ¼º°øÇßÀ»¶§ µ¹·ÁÁÖ°Ô µÇ´Âµ¥,
/usr/include/stdio.h ¸¦ ¿­¾îº¸¸é ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÇ¾î ÀÖ´Ù.
/* The opaque type of streams.  This is the definition used elsewhere.  */
typedef struct _IO_FILE FILE;
struct _IO_FILE ´Â liblo.h ¿¡ ¼±¾ðµÇ¾î Àִµ¥, ¸â¹öº¯¼ö°¡ ²Ï ¸¹À¸´Ï Á÷Á¢ »ìÆì º¸±â¹Ù¶õ´Ù. _IO_FILE ±¸Á¶Ã¼¸¦ º¸¸é ÆÄÀÏÁö½ÃÀÚ¿Í ÇÔ²², ÆÄÀÏ ÀÔÃâ·ÂÀ» À§ÇÑ ¸¹Àº ¹öÆÛ¸¦ º°µµ·Î °ü¸®Çϰí ÀÖÀ½À» ¾Ë¼ö Àִµ¥ fopen °è¿­ÇÔ¼ö¸¦ ÀÌ¿ëÇϸé, ÀÌ·¯ÇÑ ±¸Á¶Ã¼ÀÇ Á¦¾î¸¦ ¾Ë¾Æ¼­ ÇØÁØ´Ù.
°á·ÐÀûÀ¸·Î ÆÄÀÏÀ» °´Ã¼·Î ´Ù·ç°Ô µÊÀ¸·Î ÀܼÕÁúÀ» ´ú¼ö ÀÖ°Ô µÈ´Ù.
¾Æ·¡ÀÇ ¿¹Á¦Äڵ带 º¸ÀÚ

¿¹Á¦ : fopen.c
#include <unistd.h> 
#include <stdlib.h> 
#include <stdio.h> 

int main()
{
	FILE *fp;
	char buf[256];

	printf("³¡³¾·Á¸é ^D\n");
	while(fgets(buf, 256, stdin) != NULL)
	{
		printf("%s", buf);
	}
}
À§ÀÇ Äڵ带 open °è¿­ÇÔ¼ö·Î »ç¿ëÇÏ¸é ¾Æ¸¶µµ Äڵ差ÀÌ 2¹è Á¤µµ·Î ´Ã¾î³¯°ÍÀÌ´Ù.

FILE °ú ÆÄÀÏÁö½ÃÀÚ »çÀÌÀÇ È£È¯
ÃÖÃÊ¿¡ Àú¼öÁØÀ¸·Î ÆÄÀÏÀ» ´Ù·êÇʿ䰡 À־ open À» ½è´õ¶óµµ, °í¼öÁØÀÇ f °è¿­ ÇÔ¼ö¸¦ ¾²°í ½ÍÀ»¶§°¡ ÀÖÀ»°ÍÀÌ´Ù.
¶Ç´Â ±× ¹Ý´ëÀÇ °æ¿ìµµ ÀÖÀ»¼ö Àִµ¥, ´ç¿¬È÷ ÀÌ¿¡ ´ëÇÑ ÇØ¹ýµµ Á¸ÀçÇÑ´Ù.
µÑÀÇ È£È¯ÀÇ ¹æ¹ýÀ» »ý°¢Çغ¸¸é, ÃÖÃÊ¿¡ open À» ÅëÇØ¼­ ÆÄÀÏÀ» ¿­¾ú´õ¶óµµ, FILE °´Ã¼ÀÇ ±¸¼º¿ä¼Ò¸¦ ÀüºÎü¿öÁÖ°í ¿©±â¿¡ ¿©°á½ÃŰ¸é µÉ°ÍÀ̸ç, fopen À» ÅëÇØ¼­ FILE °´Ã¼·Î ¹Þ¾Ò´Ù ÇÏ´õ¶óµµ FILE °´Ã¼ ±¸Á¶Ã¼¿¡ ¾îÂ÷ÇÇ ÆÄÀÏÁö½ÃÀÚ°¡ ÀÖÀ¸¹Ç·Î, ÀÌ °ªÀ» ÀÌ¿ëÇØ¼­ Àú¼öÁØÀÇ ÀÛ¾÷À» Çϴµ¥ »ç¿ëÇÏ¸é µÉ°ÍÀÌ´Ù.
ÀÌ·¯ÇÑ »óÈ£ ȣȯÀ» À§Çؼ­ º°µµÀÇ ÇÔ¼ö°¡ Á¸ÀçÇÑ´Ù.

fdopen(3)°ú fileno(3) °¡ ±×°ÍÀ¸·Î fdopen °¡ ÆÄÀÏÁö½ÃÀÚ¸¦ ¹Þ¾Æ¼­ FILE °´Ã¼¸¦ µÇµ¹·ÁÁÖ´Â ÇÔ¼öÀ̰í, fileno °¡ FILE °´Ã¼¸¦ ¹Þ¾Æ¼­ ÆÄÀÏÁö½ÃÀÚ¸¦ µ¹·Á¹Þ´Â ÇÔ¼ö ÀÌ´Ù.
¾Æ·¡´Â fdopen ÀÇ °£´ÜÇÑ ¿¹ÀÌ´Ù.

¿¹Á¦ : fdopen.c
#include <stdio.h> 
#include <string.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 

int main()
{
	int		fd;
	FILE*	fp;
	char	buf[256];

	printf("³¡³»±â : ^D\n");
	fd = open(0, O_RDONLY);
	fp = fdopen(0, "r");
	while(fgets(buf, 256, fp) != NULL)
	{
		printf("%s", buf);
	}
	
}

ÀÌ»ó FILE °´Ã¼¿Í ÆÄÀÏÁö½ÃÀÚ ¿ÍÀÇ Â÷ÀÌÁ¡..¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸¾Ò½À´Ï´Ù.
±Ã±ÝÇѰųª À߸øµÈÁ¡ ÀÖ´Ù¸é ´ñ±ÛÀ» ³²°ÜÁֽøé, ¼º½É¼ºÀDz¯ ´äº¯µå¸®µµ·Ï ÇϰڽÀ´Ï´Ù.
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.