ÆÄÀÏ ½ºÆ®¸²°ú¿Í ÆÄÀÏ Áö½ÃÀÚ ºñ±³
ÃÑ ÆäÀÌÁö ¼ö : 3224

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



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

  • ¹®¼­ ´ëÆø ¼öÁ¤ ÀÛ¾÷ Áß : 10/04/01
  • ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹Ö¿¡¼­ÀÇ Ç¥ÁØ ÀÔÃâ·Â ÇÔ¼öÀÇ »ç¿ë¿¡ ´ëÇÑ ³»¿ëÀ» Ãß°¡ÇÒ Çʿ䰡 ÀÖÀ½

ÆÄÀÏ ½ºÆ®¸²°ú ÆÄÀÏ Áö½ÃÀÚ

½Ã½ºÅÛ ÇÁ·Î±×·¥ ÆÄÀϰü·Ã ÀÛ¾÷À» ÇÒ¶§, ¿ì¸®´Â int ÇüÀÇ ÆÄÀÏ ÁöÁ¤ ¹øÈ£¸¦ µ¹·ÁÁÖ ´Â open °è¿­ ÇÔ¼ö¿Í ÆÄÀÏ ½ºÆ®¸²ÀÎ FILEÀ» µ¹·ÁÁÖ´Â fopen °è¿­ ÇÔ¼ö Áß ¼±ÅÃÇØ¼­ ÀÔÃâ·Â ÀÛ¾÷À» ÇÒ ¼ö ÀÖ´Ù.

ÀÌ ¹®¼­´Â fopen °è¿­ ÇÔ¼ö¿Í open °è¿­ ÇÔ¼ö¿ÍÀÇ Â÷ÀÌÁ¡°ú ¾î¶°ÇÑ ÀåÁ¤°ú ´ÜÁ¡À» °¡Áö´ÂÁö¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ.

±âº»ÀûÀ¸·Î À¯´Ð½º¿¡¼­´Â ¸ðµç °ÍÀ» ÆÄÀϷΠó¸®ÇÑ´Ù. ÀÌ´Â ¸ðµç Ç¥ÁØÀÔÃâ,Ç¥ÁØÃâ·Â(:12),Ç¥ÁØ¿¡·¯(:12),ÆÄÀÏ(:12), ¼ÒÄÏ¿¡ µ¿ÀÏÇÏ°Ô Àû¿ëµÈ´Ù.

´ÙÀ½Àº zipcodeÀÇ fork ¹öÁ¯À» 4444 ¹ø port ·Î ½ÇÇà½Ã۰í, zipcode ÀÇ ÇÁ·Î¼¼½º »óȲÀ» Ãâ·ÂÇÑ °á°ú ÀÌ´Ù. zipcode ÀÇ fork ¹öÁ¯Àº ´ÙÁß¿¬°á¼­¹ö ¸¸µé±âÀÇ ¼­¹öÇÁ·Î±×·¥ÀÌ´Ù.
[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] 
 
À§À§ È­¸éÀ» º¸¸é ¾Ë°ÚÁö¸¸, Ç¥ÁØÀÔ·Â(0), Ç¥ÁØÃâ·Â(1), Ç¥ÁØ¿¡·¯(2), ¿­¸°ÆÄÀÏ(3), ¿­¸° ¼ÒÄÏ(4) ¿¡ ´ëÇØ¼­ ÀÏ·ÃÀÇ ¼ýÀÚ·ÎµÈ link ÆÄÀÏÀÌ ¸¸µé¾îÁö´Â°É º¼¼ö ÀÖÀ»°ÍÀÌ´Ù. Ç¥ÁØÀÔ·Â,Ãâ·Â,¿¡·¯´Â ÀÚ½ÅÀÇ Å͹̳ÎÀ» ¸µÅ©Çϰí ÀÖÀ¸¸ç ¿­¸°ÆÄÀÏÀº ÆÄÀÏ, ¼ÒÄÏÀº °íÀ¯ÀÇ ¼ÒÄϹøÈ£¸¦ ¸µÅ©Çϰí ÀÖÀ½À» ¾Ë¼ö ÀÖ´Ù.

INET(ÀÎÅͳÝ) ¼ÒÄÏÀÇ °æ¿ì¿¡´Â ¼ÒÄÏÅë½ÅÀ» À§Çؼ­ ÆÄÀÏÀ» »ý¼ºÇÏÁö ¾Ê°í Ä¿³Î¿¡¼­ Á÷Á¢°ü¸® ÇϹǷÎ, ÆÄÀÏ·Î ¿¬°áµÇÁö ¾Ê°í, Ä¿³ÎÀÇ ¼ÒÄÏ ¹øÈ£¿¡ ¿¬°áµÈ´Ù.

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

open °è¿­

open °è¿­ÀÇ ÇÔ¼ö´Â »ç¿ëÇÏ¸é ¹Ù·Î /proc/pid/fd ¹Ø¿¡ ÀÖ´Â ¸µÅ©ÆÄÀÏÀÇ À̸§À» int ÇüÀ¸·Î º¯È¯½ÃÄѼ­ µÇµ¹·ÁÁÖ¸ç, À̰ªÀ» ÀÌ¿ëÇØ¼­ ¿ì¸®´Â ¿©·¯°¡Áö ÀÔÃâ·Â ÀÛ¾÷À» ÇÒ¼ö ÀÖ°Ô µÇ´Â°ÍÀÌ´Ù.

open °è¿­ÀÇ ÇÔ¼öµéÀº ½Ã½ºÅÛ È£Ãâ·Î ¿î¿µÃ¼Á¦¿¡ Á÷Á¢ ¿äûÀ» ÇϹǷΠÀú ¼öÁØ ÀÔÃâ·Â ÇÔ¼ö¶ó°í ºÎ¸¥´Ù. Àú ¼öÁØ ÀÔÃâ·Â ÇÔ¼öµéÀ» Á¤¸®ÇØ º¸¾Ò´Ù.
open ÆÄÀÏÀ» ¿¬´Ù.
write ÆÄÀÏ¿¡ ¾´´Ù.
read ÆÄÀÏ¿¡¼­ Àд´Ù.
close ÆÄÀÏÀ» ´Ý´Â´Ù.

À̵é ÇÔ¼ö´Â ´Ü¼øÇϸç, ÇÏ´Â ÀÏÀÌ ¸íÈ®ÇÏ°í ºü¸£°í °­·ÂÇÏ´Ù.

ÀÌó·³ open °è¿­À» »ç¿ëÇÏ¸é °¢°¢ÀÇ ÀÔÃâ·Â ÆÄÀÏÀ» Á÷Á¢ ¿¢¼¼½º ÇÒ¼ö ÀÖÀ¸¹Ç·Î, Àú¼öÁØÀÇ ÀÛ¾÷, ¿¹¸¦µé¸é select, polling, ÆÄÀÏÀá±Ý, ·¹ÄÚµåÀá±Ý, ÆÄÀϼӼºº¯°æµîÀÇ ÆÄÀÏÀ» ´Ù·ç±â À§ÇÑ ¼¼¼¼ÇÑ ÀϵéÀ» ÇÒ¼ö ÀÖ´Â ÀåÁ¡À» ¾ò°Ô µÈ´Ù.

¹Ý¸é ´ÜÁ¡À» °¡Áö´Âµ¥, Àú¼öÁØÀ¸·Î ÆÄÀÏÀ» ´Ù·ç´Ù º¸´Ï °£´ÜÇÑ ÀÏÀ» Çұ⿡´Â ³Ê¹« ÀܼÕÀÌ ¸¹ÀÌ °£´Ù¶ó´Â Á¡ÀÌ´Ù.

°£´ÜÇÑ ÇàÀÔ·ÂÀ» ¹Þ´Â ÇÁ·Î±×·¥À» ¸¸µç´Ù°í »ý°¢Çغ¸ÀÚ, open À» »ç¿ëÇÏ°Ô µÇ¸é °³Ç๮ÀÚ °Ë»ç¸¦ À§Çؼ­ ÀԷ¹ÞÀº ¹®ÀÚ¸¦ ¹ÙÀÌÆ®´ÜÀ§·Î ºñ±³¸¦ ÇØÁÖ´Â ¼ö°í½º·¯¿òÀ» °¨¼öÇØ¾ß Çϸç, º°µµ·Î ¹öÆÛ °ü¸®¸¦ ÇØÁÖ¾î¾ß ÇÒ°ÍÀÌ´Ù.

fopen °è¿­

ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°áÇϱâ À§Çؼ­(¹Ýµå½Ã À§ÀÇ ¹®Á¦¶§¹®¿¡ ³ª¿Â°Í ¸¸Àº ¾Æ´ÏÁö¸¸), f°è¿­ ÀÇ Á»´õ °í¼öÁØÀÇ ÇÔ¼öµéÀ» Á¦°øÇÑ´Ù. ÀÌ ÇÔ¼öµéÀº °í ¼öÁØ ÀÔÃâ·Â ÇÔ¼öȤÀº Ç¥ÁØ ÀÔÃâ·Â ÇÔ¼ö¶ó°í ºÎ¸¥´Ù.

Ç¥ÁØ ÀÔÃâ·Â ÇÔ¼öµéÀº ÆÄÀÏÀ» ½ºÆ®¸² (È帧)À¸·Î ´Ù·é´Ù. 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); 
    } 
} 
 

FILE °ú ÆÄÀÏÁö½ÃÀÚ »çÀÌÀÇ º¯È¯

ÃÖÃÊ¿¡ Àú ¼öÁØ ÇÔ¼ö·Î ÆÄÀÏÀ» ´Ù·ê Çʿ䰡 À־ openÇÔ¼ö¸¦ ÀÌ¿ëÇß´Ù°í ÇÏ´õ¶óµµ, Á¦¾î´Â Ç¥ÁØ ÀÔÃâ·Â ÇÔ¼ö¸¦ »ç¿ëÇÏ°í ½ÍÀ» ¶§°¡ ÀÖÀ» °ÍÀÌ´Ù.

³×Æ®¿öÅ© ÇÁ·Î±×·¥À» »ý°¢ÇØ º¸ÀÚ. ¼ÒÄÏÀº socket(2)ÇÔ¼ö·Î ¸¸µå´Âµ¥, ÀÌ ÇÔ¼ö´Â ¼ÒÄÏ ÁöÁ¤ ¹øÈ£¸¦ ¹ÝȯÇÑ´Ù. À̶§ ¹®ÀÚ¿­ µ¥ÀÌÅ͸¦ ¼­·Î ÁÖ°í ¹Þ´Â´Ù°í Çϸé Àú ¼öÁØ ÀÔÃâ·Â ÇÔ¼ö º¸´Ù´Â Ç¥ÁØ ÀÔÃâ·Â ÇÔ¼ö¸¦ »ç¿ëÇÏ°í ½ÍÀ» ¶§°¡ ÀÖÀ» °ÍÀÌ´Ù. ÈξÀ ½±°Ô ó¸®ÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù.

¶Ç´Â ±× ¹Ý´ëÀÇ °æ¿ìµµ ÀÖÀ»¼ö Àִµ¥, ´ç¿¬È÷ ÀÌ¿¡ ´ëÇÑ ÇØ¹ýµµ Á¸ÀçÇÑ´Ù.

fdopen(3)°ú fileno(3) °¡ ±×°ÍÀ¸·Î fdopen °¡ ÆÄÀÏÁö½ÃÀÚ¸¦ ¹Þ¾Æ¼­ FILE °´Ã¼¸¦ µÇµ¹·ÁÁÖ´Â ÇÔ¼öÀ̰í, fileno(3) °¡ 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); 
    } 
     
} 
 
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.