|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
fcntl À» ÀÌ¿ëÇÑ ÆÄÀÏÁ¦¾î
À¯´Ð½ºÀÇ ¸ðµç°ÍÀº ÆÄÀÏ·Î ÀÌ·ç¾îÁ® ÀÖ´Ù´Â »ç½ÇÀº ¾Æ¸¶µµ À߾˰í ÀÖÀ»
°ÍÀÌ´Ù. ±×·¯¹Ç·Î À¯´ÉÇÑ? À¯´Ð½º ÇÁ·Î±×·¡¸Ó·Î ¼ºÀåÇϱâ À§Çؼ´Â
ÆÄÀϰü·ÃµÈ ¿©·¯°¡Áö ÀÛ¾÷µéÀ» ´É¼÷ÇÏ°Ô Ã³¸®ÇÒ¼ö ÀÖ¾î¾ßÇÑ´Ù.
½ÇÁ¦·Î À¯´Ð½º ÇÁ·Î±×·¥À» ÇÏ°Ô µÇ¸é °¡Àå ¸¹ÀÌ ÇÏ´Â ÀÛ¾÷ÀÌ ÆÄÀϰú
¿¬°üµÈ ÀÛ¾÷ÀÌ´Ù.
ÀÏ¹Ý ÆÄÀÏÀº ¹°·ÐÀ̰í, ³×Æ®¿÷ ÇÁ·Î±×·¡¹Ö½Ã ¼ÒÄÏÀ» ´Ù·ê¶§,
IPC, µð¹ÙÀ̽ºµîÀ» ´Ù·ç´Â ¸ðµç °ÍÀÌ °á±¹Àº ÆÄÀÏÀ» ´Ù·ç´Â °ÍµéÀÌ´Ù.
fcntl Àº ÀÌ·¯ÇÑ ÆÄÀϵéÀÇ Æ¯¼º Á¦¾î¸¦ À§ÇØ Á¦°øÇÏ´Â ÇÔ¼öÀÌ´Ù.
fcntl ½Ã½ºÅÛÈ£ÃâÀº ÀÌ¹Ì ¿·ÁÀÖ´Â ÆÄÀÏÀÇ Æ¯¼º Á¦¾î¸¦ À§Çؼ »ç¿ëµÈ´Ù.
#include <unistd.h>
#include <fcntl.h>
int fcntl(int fd, int cmd);
int fcntl(int fd, int cmd, long arg);
int fcntl(int fd, int cmd, struct flock *lock);
|
ù¹øÂ° ÀÎÀÚ·Î ÁÖ¾îÁö´Â fd ´Â open(2), socket(2) µîÀÇ ½Ã½ºÅÛ È£ÃâÀ»
ÅëÇØ¼ ¸¸µé¾îÁø ÆÄÀÏ ÁöÁ¤ÀÚÀÌ´Ù. µÎ¹øÂ° ÀÎÀÚÀÎ cmd °¡ fd ¿¡ ´ëÇÑ
Ư¼ºÀ» Á¦¾îÇϱâÀ§ÇÑ °ªÀÌ´Ù.
fcntl ·Î ÇÒ¼ö ÀÖ´Â ÀϵéÀº °á±¹ cmd ¿¡ ÀÇÇØ¼ °áÁ¤µÈ´Ù°í
º¼¼ö ÀÖ´Ù. ´ë·«ÀûÀ¸·Î ÇÒ¼ö ÀÖ´Â ÀϵéÀº ´ÙÀ½°ú °°´Ù.
ÇÒ¼ö ÀÖ´Â ÀÏÀº cmd ¿¡ ÀÇÇØ¼ °áÁ¤µÊÀ¸·Î cmd º°·Î ¼³¸íÀ»
Çß´Ù.
- F_DUPFD
À̸§¿¡¼ ÁÖ´Â ¾î°¨Ã³·³ ¿·ÁÁø ÆÄÀÏÁöÁ¤ÀÚ¸¦ º¹»çÇϱâ
À§Çؼ »ç¿ëÇÑ´Ù. ¾ð¶æº¸¸é dup2(2) ÇÔ¼ö¿Í ¸Å¿ì ºñ½ÁÇѵ¥,
dup2 ´Â º¹»çµÉ ÆÄÀÏÁöÁ¤ÀÚ¸¦ »ç¿ëÀÚ°¡ Áö½ÃÇÏ´Â
¹Ý¸é, F_DUPFD ¸¦ »ç¿ëÇÒ°æ¿ì arg ¿Í °°Àº Å©±âÀÇ
ÆÄÀÏÁöÁ¤ÀÚ¸¦ µÇµ¹·ÁÁְųª, ÀÌ¹Ì »ç¿ëµÇ¾îÁö°í ÀÖ´Ù¸é,
arg º¸´Ù Å« ÇÒ´ç°¡´ÉÇÑ ÆÄÀÏÁöÁ¤¹øÈ£Áß °¡Àå ÀÛÀº
¹øÈ£¸¦ µÇµ¹·ÁÁØ´Ù.
ÀÌ º¹»çµÈ ÆÄÀÏÁöÁ¤¹øÈ£´Â Àá±Ý, ÆÄÀÏÀ§Ä¡ Æ÷ÀÎÅÍ, Ç÷¹±×
µîÀ» °øÀ¯ÇÑ´Ù. Áï ÆÄÀÏÁöÁ¤ÀÚµéÁß Çϳª¿¡¼
ÆÄÀÏÀÇ À§Ä¡°¡ º¯°æµÈ´Ù¸é(lseekµîÀ» ÀÌ¿ë), ´Ù¸¥
ÆÄÀÏÁöÁ¤ÀÚµµ º¯°æµÈ´Ù.
±×·¸Áö¸¸ close-on-exec ´Â °øÀ¯ÇÏÁö ¾Ê´Â´Ù.
close-on-exec ´Â ´ÙÀ½Àå¿¡¼ ´Ù·çµµ·Ï ÇϰڴÙ.
- F_GETFD
¸®ÅϰªÀ¸·Î fd ¿¡ ´ëÇÑ flag °ªÀ» ³Ñ°ÜÁØ´Ù.
ÇöÀç´Â FD_CLOEXEC Á¤º¸¸¸ ³Ñ°ÜÁØ´Ù.
FD_CLOEXEC ´Â close-on-exec Á¤Ã¥¿¡ °üÇÑ ³»¿ëÀ¸·Î
´ÙÀ½Àå¿¡¼ ´Ù·çµµ·Ï ÇϰڴÙ.
- F_SETFD
FD_CLOEXEC(close-on-exec) ÀÇ °ªÀ» ÁöÁ¤µÈ
ºñÆ®°ªÀ¸·Î ¼³Á¤ÇÑ´Ù.
- F_GETFL
ÆÄÀÏÁöÁ¤ÀÚ¿¡ ´ëÇÑ Ç÷¡±×°ª - open(2) È£Ãâ½Ã
ÁöÁ¤ÇÑ Ç÷¡±×¸¦ µÇµ¹·ÁÁØ´Ù.
- F_SETFL
arg ¿¡ ÁöÁ¤µÈ °ªÀ¸·Î ÆÄÀÏÁöÁ¤ÀÚ fd ÀÇ Ç÷¡±×¸¦ Àç
¼³Á¤ÇÑ´Ù. ÇöÀç´Â ´ÜÁö O_APPEND, O_NONBLOCK, O_ASYNC
¸¸À» ¼³Á¤ÇÒ¼ö ÀÖ´Ù. ´Ù¸¥ Ç÷¡±×µé (O_WRONLY ¿Í °°Àº)
Àº ¿µÇâÀ» ¹ÞÁö ¾Ê´Â´Ù.
- F_GETOWN
À̰ÍÀº ºñµ¿±â ÀÔÃâ·Â°ú °ü·ÃµÇ¾î¼ »ç¿ëµÇ¸ç,
SIGIO¿Í SIGURG ½ÅÈ£¸¦ ¹Þ´Â ÇÁ·Î¼¼½º ¾ÆÀ̵ð¸¦
¾ò±â À§Çؼ »ç¿ëµÈ´Ù.
- F_SETOWN
ºñµ¿±â ÀÔÃâ·Â°ú °ü·ÃµÇ¾î¼ »ç¿ëµÇ¸ç, SIGIO, SIGURG
½Ã±×³ÎÀ» ¼ö½ÅÇÏ´Â ÇÁ·Î¼¼½º ¾ÆÀ̵ð(ȤÀº ±×·ì)À»
¼³Á¤Çϱâ À§Çؼ »ç¿ëµÈ´Ù.
À̿ܿ¡µµ F_SETLK, F_SETLKW, F_SETLK ¿Í °°Àº ·¹ÄÚµå Àá±Ý¿¡ ´ëÇÑ
¼³Á¤µµ °¡´ÉÇÏ´Ù.
ÀÌ ³»¿ëµéÀº fcntl ·¹ÄÚµåÀá±Ý¿¡¼ ´Ù·ç°í
ÀÖÀ½À¸·Î ¿©±â¿¡¼ ¼³¸íÇÏÁø ¾Ê°Ú´Ù. (¶ÇÇÑ À̹®¼ÀÇ ³»¿ëÀº
ÆÄÀÏ´ÜÀ§ÀÇ Æ¯¼º Á¶ÀÛÀ̹ǷΠ·¹ÄÚµå´ÜÀ§ÀÇ Æ¯¼ºÁ¶ÀÛÀº
ÀÌ ¹®¼ÀÇ ³»¿ë°ú ´Ù¸¥ºÐ¾ßÀÌ´Ù.)
fcntlÀÇ Æ¯¼ºÁ¦¾î¸¦ ´Ù·ç±â Àü¿¡ close-on-exec¿¡ ´ëÇØ¼
°£´ÜÈ÷ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ.
º¸Åë ÇÁ·Î¼¼½º¿¡¼ exec(3) ¸¦ ½ÃÄѼ »õ·Î¿î ÇÁ·Î¼¼½º¸¦
½ÇÇà½Ã۸é ÀÌ »õ·Î¿î ÇÁ·Î¼¼½º´Â ±âÁ¸ÀÇ ÇÁ·Î¼¼½ºÀÇ À̹ÌÁö¸¦
µ¤¾î¾²°Ô µÈ´Ù. ±×·¯¸é¼ Ưº°ÇÑ ¼³Á¤ÀÌ ¾øÀ»°æ¿ì ¿¸°ÆÄÀÏÁöÁ¤ÀÚ¸¦
±×´ë·Î ³Ñ°ÜÁÖ°Ô µÈ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ open-on-exec.c ·Î ÀúÀåÇϵµ·Ï
ÇÏÀÚ.
¿¹Á¦ : open-on-exec.c
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
int main()
{
int fd;
int val;
fd = open("exec_copy.txt", O_CREAT);
execl("/home/my_cvs/test/c_source/loop", "./loop", 0);
}
|
execl ·Î ½ÇÇà½ÃŰ´Â loop ÇÁ·Î±×·¥Àº ±×³É ¹«ÇÑ·çÇÁ µµ´Â ÇÁ·Î±×·¥
ÀÌ´Ï °¢ÀÚ ¸¸µé±â ¹Ù¶õ´Ù.
À§ ÇÁ·Î±×·¥À» ½ÇÇà½ÃŲÈÄ ps ¸¦ È®ÀÎÇϰí /proc/pid/fd ·Î
À̵¿Çؼ ls ¸¦ ÇØº¸¸é
[root@coco fd]# ls -al
ÇÕ°è 0
dr-x------ 2 root root 0 10¿ù 25 13:59 .
dr-xr-xr-x 3 root root 0 10¿ù 25 13:59 ..
lrwx------ 1 root root 64 10¿ù 25 13:59 0 -> /dev/ttyp0
lrwx------ 1 root root 64 10¿ù 25 13:59 1 -> /dev/ttyp0
lrwx------ 1 root root 64 10¿ù 25 13:59 2 -> /dev/ttyp0
lr-x------ 1 root root 64 10¿ù 25 13:59 3 -> /home/mycvs/test/exec_copy.txt
|
exec ÇÏ¸é¼ ¿¸°ÆÄÀÏÁöÁ¤ÀÚ°¡ »ó¼ÓµÇ¾úÀ½À» ¾Ë¼ö ÀÖ´Ù.
±×·¯³ª ¶§¶§·Î exec ¸¦ ÀÌ¿ëÇØ¼ ÇÁ·Î¼¼½º¸¦ ¸¸µé±âÀü¿¡
±âÁ¸¿¡ ¿·È´ø ÆÄÀÏÁöÁ¤ÀÚµéÀ» ±ú²ýÇÏ°Ô Á¤¸®ÇÏ°í ½ÍÀ»¶§°¡
ÀÖÀ»°ÍÀÌ´Ù. ÀÌ·¯ÇÑ °æ¿ì¸¦ close-on-exec ½ÃŲ´Ù¶ó°í ¸»Çϸç,
fcntl À» ÀÌ¿ëÇØ¼ ¿¸° ÆÄÀÏÁöÁ¤ÀÚ¿¡ ´ëÇØ¼ close-on-exec ÀÛµ¿À»
Çϵµ·Ï ÇÒ¼ö ÀÖ´Ù. À§ÀÇ open-on-exec.c ¸¦ close-on-exec ¹öÁ¯À¸·Î
¹Ù²Ù´Â ¹æ¹ýÀº 2.3.2절¿¡¼ ¼³¸íÇϵµ·Ï ÇϰڴÙ.
À§¿¡¼ ¼³¸íÀ» ÀÌ¹Ì ÇßÀ½À¸·Î °£´ÜÇÑ ¿¹Á¦·Î ÀÌÇØ¸¦
µ½´Â ¼öÁØ¿¡¼ ³¡³»µµ·Ï ÇϰڴÙ.
¿¹Á¦ : f_dupfd.c
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
int main()
{
int testfd;
int fd;
fd = open("test.txt", O_CREAT);
testfd = fcntl(fd, F_DUPFD, 10);
printf("testfd :%d\n", testfd);
testfd = fcntl(fd, F_DUPFD, 10);
printf("testfd :%d\n", testfd);
getchar();
}
|
À§ÀÇ ÇÁ·Î±×·¥À» ½ÇÇà½ÃÄѺ¸¸é testfd ·Î °¢°¢ 4, 5 °¡
¾Æ´Ñ (0, 1, 2 ´Â Ç¥ÁØ ÀÔ·Â/Ãâ·Â/¿¡·¯, 3 Àº test.txt)
10, 11 ·Î ÆÄÀÏÁöÁ¤¹øÈ£°¡ ÁöÁ¤µÊÀ» ¾Ë¼ö ÀÖÀ»°ÍÀÌ´Ù.
close-on-exec °ªÀ» Á¶Á¤Çϱâ À§Çؼ »ç¿ëµÈ´Ù.
F_GETFD ¸¦ ÀÌ¿ëÇØ¼ FD_CLOEXEC °ªÀ» °¡Á®¿À°í
F_SETFD ¸¦ ÀÌ¿ëÇØ¼ ÀÌ °ªÀ» º¯°æÇÑ´Ù.
±âº»ÀûÀ¸·Î´Â exec ÇÒ¶§ close µÇÁö ¾Ê´Â´Ù.
±×·³ f_dupfd.c ¸¦ close-on-exec Çϵµ·Ï ¾à°£ º¯°æ ÇØº¸µµ·Ï
ÇÏÀÚ.
¿¹Á¦ : close-on-exec
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
int main()
{
int fd;
int val;
fd = open("exec_copy.txt", O_CREAT);
// FD_CLOEXEC °ªÀ» fcntl À» ÀÌ¿ëÇØ¼
// °¡Á®¿Â ´ÙÀ½ ¼¼ÆÃµÇ¾î ÀÖ´ÂÁö °Ë»çÇÑ´Ù.
val = fcntl(fd, F_GETFD, 0);
if (val & FD_CLOEXEC)
printf("close-on-exec bit on\n");
else
printf("close-on-exec bit off\n");
// FD_CLOEXEC ¸¦ ¼¼ÆÃÇÑ´Ù.
val |= FD_CLOEXEC;
if (val & FD_CLOEXEC)
printf("close-on-exec bit on\n");
else
printf("close-on-exec bit off\n");
fcntl(fd, F_SETFD, val);
// loop ÇÁ·Î±×·¥À» exec ½ÃŲ´Ù.
execl("/home/my_cvs/test/c_source/loop", "./loop", 0);
}
|
À§ÀÇ ÇÁ·Î±×·¥À» ½ÇÇàÇÏ¸é ¾Æ·¡¿Í °°Àº ½ÇÇà °á°ú¸¦
º¸¿©ÁÙ°ÍÀÌ´Ù.
[root@localhost c_source]# ./close-on-exec
close-on-exec bit off
close-on-exec bit on
|
À§ÀÇ ÇÁ·Î±×·¥À» ½ÇÇà½ÃÄѵР»óÅ¿¡¼ °ú¿¬ fd °¡ close-on-exec
µÇ¾ú´ÂÁö /proc/pid/fd ¸¦ È®ÀÎÇØº¸¸é ±âÁ¸¿¡ ¿·ÁÀÖ´ø fd °¡
»ó¼ÓµÇ¾îÀÖÁö ¾ÊÀ½À» È®ÀÎÇÒ¼ö ÀÖÀ»°ÍÀÌ´Ù.
F_GETFL À» open(2)µî¿¡ ÀÇÇØ¼ ¿·ÁÁø ÆÄÀÏÁöÁ¤ÀÚ ¿¡ ´ëÇÑ
Ç÷¹±× °ªÀ» Àоî¿Â´Ù. ±×¸®°í F_SETFL ¿¡ ÀÇÇØ¼
ÆÄÀÏÁöÁ¤ÀÚ¿¡ ´ëÇÑ °ª(Ư¼º)À» ¼¼ÆÃÇÑ´Ù.
F_SETFL À» ÀÌ¿ëÇØ¼ º¯°æÇÒ¼ö ÀÖ´Â ÆÄÀÏÁöÁ¤ÀÚÀÇ Æ¯¼ºÀº
O_APPEND, O_NONBLOCK, O_ASYNC µîÀÌ´Ù.
O_RDONLY, O_WRONLY, O_RDWR µîÀÇ Á¤º¸´Â Àоî¿Ã¼ö´Â ÀÖÁö¸¸
º¯°æÇÒ¼ö´Â ¾ø´Ù.
¿ì¼± Àбâ±ÇÇÑ Á¤º¸¸¦ Àоî¿À´Â °ÍÀº O_ACCMODE ¿Í ºñÆ®¿¬»êÀ»
ÇÔÀ¸·Î½á °¡Á®¿Ã¼ö ÀÖ´Ù. ±×¹Û¿¡ Á¤º¸´Â
°¢°¢ÀÇ Ç÷¹±×(O_APPEND, O_NONBLOCK, O_ASYNC) µî°ú ºñÆ®¿¬»êÀ»
ÇÔÀ¸·Î½á ¾ò¾î¿Ã¼ö ÀÖ´Ù.
¿¹Á¦ : fgetfl_test.c
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
int main()
{
int mode, fd, value;
fd = open("test.sh", O_RDONLY|O_CREAT);
if (fd < 0)
{
perror("open error : ");
exit(0);
}
value = fcntl(fd, F_GETFL, 0);
mode = value & O_ACCMODE;
if (mode == O_RDONLY)
printf("O_RDONLY setting\n");
else if (mode == O_WRONLY)
printf("O_WRONLY setting\n");
else if (mode == O_RDWR)
printf("O_RDWR setting\n");
if (value & O_NONBLOCK)
printf("O_NONBLOCK setting\n");
else
printf("BLOCKING mode setting\n");
if (value & O_ASYNC)
printf("O_ASYNC setting\n");
}
|
ÀÌ ÇÁ·Î±×·¥À» ½ÇÇà½ÃŰ¸é ´ÙÀ½°ú °°Àº °á°ú¸¦
º¸¿©ÁÙ°ÍÀÌ´Ù.
[root@localhost c_source]# ./fgetfl_test
O_RDONLY setting
BLOCKING mode setting
|
ÃÖÃÊ open ½ÃÀÇ ÆÄÀÏ Ç÷¹±× °ªÀ» Àоî¿À°í ÀÖÀ½À»
¾Ë¼ö ÀÖ´Ù.
Ư¼ºÀ» º¯°æÇÒ¼ö ÀÖ´Â 3°³ÀÇ °æ¿ì ´Ü¼øÈ÷ ºñÆ®¿¬»êÀ»
ÇØ¼ ÇØ´ç flag ¸¦ Ų´ÙÀ½¿¡ ±×°ªÀ» fcntl À» ÀÌ¿ëÇØ¼
ÆÄÀÏÁöÁ¤ÀÚ¿¡ ¼¼ÆÃÇØÁÖ¸é µÈ´Ù. ´ÙÀ½ ¿¹Á¦´Â
Ç¥ÁØÀÔ·Â(0) À» NONBLOCK ¸ðµå·Î º¯°æ ½ÃŲ ¿¹ÀÌ´Ù.
fsetfl_test.c
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#define STDIN 0
int main()
{
int mode, fd, value;
char buf[255];
memset(buf, 0x00, 255);
// óÀ½ ÀÔ·ÂÀº ºÀ¼â¸ðµå·Î
read (STDIN, buf, 255);
printf("-> %s\n", buf);
memset(buf, 0x00, 255);
// NONBLOCKING ¸ðµå·Î º¯°æÇÑ´Ù.
value = fcntl(STDIN, F_GETFL, 0);
value |= O_NONBLOCK;
fcntl(STDIN, F_SETFL, value);
printf("NON BLOCKING MODE ·Î º¯°æ \n");
// 2ÃÊÈÄ ºñºÀ¼â ¸ðµå·Î µé¾î°£´Ù.
sleep(2);
// ¹Ù»Û´ë±â(busy wait) ½ÃÀÛ
while(1)
{
read (STDIN, buf, 255);
printf("-> %s\n", buf);
}
}
|
±âº»ÀûÀ¸·Î Ç¥ÁØÀÔ·Â(0) Àº ºÀ¼â¸ðµå·Î ½ÃÀ۵ȴÙ.
À̰ÍÀ» fcntl À» ÀÌ¿ëÇØ¼ ºñºÀ¼â ¸ðµå·Î ¸¸µé°í
Å×½ºÆ®ÇѰÍÀÌ´Ù. À§ÀÇ ÇÁ·Î±×·¥À» ½ÇÇàÇϸé
óÀ½ ÀÔ·ÂÀº ºÀ¼â¸ðµå·Î »ç¿ëÀÚ ÀÔ·ÂÀÌ ÀÖÀ»¶§±îÁö
±â´Ù¸®°í, ±× ÈÄ¿¡´Â ºñºÀ¼â ¸ðµå·Î ¹Ù»Û »óÅ¿¡¼
»ç¿ëÀÚ ÀÔ·ÂÀ» ó¸®Çϴ°ÍÀ» º¼¼ö ÀÖÀ»°ÍÀÌ´Ù.
O_ASYNC ¿Í O_APPEND ¿ª½Ã µ¿ÀÏÇÑ ¹æ¹ýÀ¸·Î 󸮰¡´ÉÇÏ´Ù.
O_APPEND ´Â ´ëÃæ ¾î¶°ÇÑ Æ¯¼ºº¯°æÀ» À§Çؼ »ç¿ëÇÏ´ÂÁö
¾Ë°ÍÀÌ´Ù. O_ASYNC ¿¡ ´ëÇØ¼´Â º°·Î Àͼ÷ÇÏÁö ¾ÊÀ»¼öµµ Àִµ¥,
À¯´Ð½º I/O ¸ðµ¨Áß ÈçÈ÷ ¸»ÇÏ´Â "ºñµ¿±â ÀÔÃâ·Â" ¸ðµ¨À»
±¸ÇöÇϱâ À§Çؼ »ç¿ëµÈ´Ù. ºñµ¿±â´Â ¾ðÁ¦ ÀϾÁö ¾Ë¼ö ¾ø´Â
»ç°ÇÀ» ¸»Çϸç, À¯´Ð½º¿¡¼´Â ÀÌ·¯ÇÑ ºñµ¿±â »ç°ÇÀ» ¾Ë·ÁÁÖ±â
À§Çؼ ½Ã±×³Î(signal)À» »ç¿ëÇÑ´Ù.
À¯´Ð½ºÀÇ I/O ¸ðµ¨ÀÇ Á¾·ù´Â ¸®´ª½º I/O ¸ðµ¨ À»
Âü°íÇϱ⠹ٶõ´Ù.
ÀÌ ¹®¼¿¡¼´Â ºñµ¿±â ÀÔ·ÂÃâ¹æ¹ý ÀÚü¿¡ ´ëÇÑ ³»¿ëÀº ´Ù·çÁö
¾ÊÀ»°ÍÀÌ´Ù. À̰ÍÀº ¸®´ª½º I/O ¸ðµ¨ÀÇ ¶Ç´Ù¸¥ ±¸ÇöÀÓÀ¸·Î
¸®´ª½º I/O ¸ðµ¨ °ü·Ã ¹®¼¸¦ ´Ù·ç¸é¼ ¾ð±ÞÇÒ°ÍÀÌ´Ù.
(ÇöÀç´Â Blocking I/O, Non-Blocking I/O, I/O Multiplexing
±îÁö¸¦ ´Ù·é ¹®¼µéÀÌ Á¦°øµÇ°í ÀÖ´Ù)
´Ù·ç°í ÀÖ´Ù)
¹Ù·Î ÀÀå¿¡¼ ¿ì¸®´Â F_GETFL/F_SETFL À» ÀÌ¿ëÇØ¼
ÆÄÀÏÁöÁ¤ÀÚÀÇ Æ¯¼ºÀ» º¯°æÇÏ´Â ¹ýÀ» ¹è¿ü¾ú´Ù.
±×Áß¿¡¼ ºñµ¿±â ÀÔÃâ·Â ¼³Á¤À» À§ÇÑ O_ASYNC Ç÷¹±×¸¦
¼³Á¤ÇÏ´Â ¹æ¹ýÀ» ¹è¿ü¾ú´Âµ¥, F_GETOWN/F_SETOWN Àº
ÀÌ ºñµ¿±â ÀÔÃâ·Â°ú °ü·ÃµÇ¾î¼ »ç¿ëµÇ´Â Ç÷¡±×ÀÌ´Ù.
À̵é Ç÷¹±×¸¦ »ç¿ëÇÔÀ¸·Î½á ºñµ¿±â ÀÔÃâ·Â ¸ðµå·Î ÆÄÀÏÁöÁ¤ÀÚ°¡
¼³Á¤µÇ¾î ÀÖÀ»¶§, ¾î¶² ÇÁ·Î¼¼½º(ȤÀº ±×·ì) ¾ÆÀ̵ð·Î ºÎÅÍ ¿À´Â
½Ã±×³ÎÀ» ¹ÞÀ»Áö¸¦ ÁöÁ¤ÇØÁÙ¼ö ÀÖ´Ù.
¿ª½Ã ÀÚ¼¼ÇÑ ³»¿ëÀº ¸®´ª½º I/O ¸ðµ¨ ¹®¼¿¡¼ ´Ù·çµµ·Ï
ÇϰڴÙ.
|
|