FCNTL

Section: Linux Programmer's Manual (2)
Updated: 12 July 1999
Index
Return to Main Contents
 

À̸§

fcntl - ÆÄÀÏ ±â¼úÀÚ(file descriptor) Á¶ÀÛ  

»ç¿ë¹ý

#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);
 

¼³¸í

fcntl fd¿¡¼­ ´Ù¾çÇÑ ¿¬»êµé Áß Çϳª¸¦ ¼öÇàÇÑ´Ù. ¹®Á¦ Áß ¿¬»êÀº cmd¿¡ ÀÇÇØ °áÁ¤µÈ´Ù:
F_DUPFD
argº¸´Ù Å©°Å³ª µ¿ÀÏÇÑ °¡Àå ³·Àº ¼ýÀÚ°¡ Áö¸íµÈ »ç¿ë°¡´ÉÇÑ ÆÄÀÏ ±â¼úÀÚ¸¦ ã°í, ±×°ÍÀÌ fdÀÇ º¹»çº»ÀÌ µÇµµ·Ï Ç϶ó. ÀÌ´Â ¾ö¹ÐÇÏ°Ô ÁöÁ¤µÈ ±â¼úÀÚ¸¦ »ç¿ëÇÏ´Â dup2(2)¿Í´Â ´Ù¸£´Ù.

¿À·¡µÈ ±×¸®°í »õ·Î¿î ±â¼úÀÚµéÀº ±³´ëÀûÀ¸·Î »ç¿ëµÉ ¼ö ÀÖ´Ù. À̵éÀº Àá±Ý(lock), ÆÄÀÏ À§Ä¡ Æ÷ÀÎÅÍ ±×¸®°í Ç÷¡±×¸¦ °øÀ¯ÇÑ´Ù. ¿¹¸¦ µé¸é, ±â¼úÀÚµéÁß Çϳª¿¡¼­ ÆÄÀÏ À§Ä¡°¡ lseek¸¦ »ç¿ëÇؼ­ ¼öÁ¤µÇ¸é, À§Ä¡´Â ¶ÇÇÑ ´Ù¸¥ °Í¿¡ ´ëÇØ º¯°æµÉ ¼ö ÀÖ´Ù.

µÎ ±â¼úÀÚµéÀº close-on-exec Ç÷¡±×¸¦ °øÀ¯ÇÏÁö ¾Ê´Â´Ù. ±×·¯³ª º¹Á¦º»ÀÇ close-on-exec Ç÷¡±×´Â ½ÇÇàÁß¿¡´Â Á¾·áµÇÁö ¾Ê´Â off »óÅ°¡ µÈ´Ù.

¼º°øÇϸé, »õ·Î¿î ±â¼úÀÚ´Â ¸®ÅϵȴÙ.

F_GETFD
close-on-exec¸¦ Àд´Ù. ¸¸ÀÏ FD_CLOEXEC ºñÆ®°¡ 0À̸é, ÆÄÀÏÀº exec¸¦ ÅëÇØ ¿­¸° »óÅ·Π³²°ÜÁö°í, ±×·¸Áö ¾ÊÀ¸¸é, ´ÝÈù´Ù.
F_SETFD
close-on-exec Ç÷¡±×¸¦ argÀÇ FD_CLOEXEC ºñÆ®¿¡ ÀÇÇØ ÁöÁ¤µÈ °ªÀ¸·Î ¼³Á¤ÇÑ´Ù.
F_GETFL
±â¼úÀÚÀÇ Ç÷¡±×¸¦ Àд´Ù. (¸ðµç Ç÷¡±×( open(2)¿¡ ÀÇÇØ ¼³Á¤µÈ)µéÀº ¸®ÅϵȴÙ.)
F_SETFL
arg ¿¡ ÀÇÇØ ÁöÁ¤µÈ °ªÀ» ±â¼úÀÚÀÇ Ç÷¡±×·Î ¼³Á¤ÇÑ´Ù. ¿ÀÁ÷ O_APPEND, O_NONBLOCK ±×¸®°í O_ASYNC ÀÌ ¼³Á¤µÉ ¼ö ÀÖ´Ù. ´Ù¸¥ Ç÷¡±×µéÀº ¿µÇâÀ» ¹ÞÁö ¾Ê´Â´Ù.

Ç÷¡±×µéÀº dup(2), fork(2) ·Î ¸¸µé¾îÁø µ¿ÀÏÇÑ ÆÄÀÏ ±â¼úÀÚÀÇ º¹»çº»µé »çÀÌ¿¡ °øÀ¯µÈ´Ù.

Ç÷¡±× ¹× ±×µéÀÇ Àǹ̴ open(2)¿¡ ¼³¸íµÇ¾î ÀÖ´Ù. F_GETLK, F_SETLK ±×¸®°í F_SETLKW µéÀº ÀÓÀÇÀÇ ÆÄÀÏ Àá±ÝÀ» °ü¸®Çϴµ¥ »ç¿ëµÈ´Ù. ¼¼¹ø° Àμö lockÀº ±¸Á¶Ã¼ flock(ÀÌ È£Ãâ¿¡ ÀÇÇØ °ãÃĽáÁú ¼ö ÀÖ´Â)¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀÌ´Ù.

F_GETLK
Àá±ÝÀ» ¾òÀ» ¼ö ¾øµµ·Ï Á¦¾îÇÏ´Â flock ±¸Á¶·Î ¸®ÅÏÇϰųª, ´Ù¸¥ Àå¾Ö°¡ ¾ø´Ù¸é,
 Àá±ÝÀÇ l_type Çʵ带 F_UNLCKÀ¸·Î ¼³Á¤ÇÑ´Ù.
F_SETLK
l_typeÀÌ F_RDLCK ȤÀº F_WRLCKÀÏ ¶§, Àá±ÝÀÌ ¼³Á¤µÈ°Å³ª, l_typeÀÌ F_UNLCKÀÏ ¶§, Àá±ÝÀº ¼Ò°ÅµÈ´Ù. ´Ù¸¥ ´©±º°¡¿¡ ÀÇÇØ Àá±Ý(lock)ÀÌ ÀÌ·ç¾îÁö¸é, ÀÌ È£ÃâÀº -1À» ¸®ÅÏÇÏ°í, errno¸¦ EACCES ȤÀº EAGAIN·Î ¼³Á¤ÇÑ´Ù.
F_SETLKW
F_SETLK°ú °°Áö¸¸, ¿¡·¯¸¦ ¸®ÅÏÇÏ´Â ´ë½Å¿¡, Àá±ÝÀÌ Ç®·ÁÁö±â¸¦ ±â´Ù¸°´Ù. ¸¸ÀÏ fcntlÀÌ ±â´Ù¸®°í ÀÖÀ» ¶§, ½Ã±×³ÎÀÌ ÀâÈ÷¸é, ÀÌ´Â ÀÎÅÍ·´Æ®µÇ°í, ½Ã±×³Î 󸮱Ⱑ ¸®ÅÏµÈ ÈÄ¿¡, Áï½Ã ¸®ÅÏ°ª -1°ú errno°¡ EINTR·Î ¼³Á¤µÇ¾î ¸®ÅϵȴÙ. F_GETOWN, F_SETOWN, F_GETSIG ±×¸®°í F_SETSIG ÀÔÃâ·Â(I/O) À¯¿ë¼º ½Ã±×³ÎÀ» °ü¸®Çϴµ¥ »ç¿ëµÈ´Ù.
F_GETOWN
ÆÄÀÏ ±â¼úÀÚ fd»ó¿¡¼­ À̺¥Æ®µé¿¡ ´ëÇÑ SIGIO ±×¸®°í SIGURG ½Ã±×³ÎµéÀ» ¼ö½ÅÇÏ´Â ÇÁ·Î¼¼½º ID ¶Ç´Â ÇÁ·Î¼¼½º ±×·ìÀ» ¾ò´Â´Ù.

F_SETOWN
ÆÄÀÏ ±â¼úÀÚ fd»ó¿¡¼­ À̺¥Æ®µé¿¡ ´ëÇÑ SIGIO ±×¸®°í SIGURG ½Ã±×³ÎµéÀ» ¼ö½ÅÇÏ´Â ÇÁ·Î¼¼½º ID ¶Ç´Â ÇÁ·Î¼¼½º ±×·ìÀ» ¼³Á¤ÇÑ´Ù. ÇÁ·Î¼¼½º ±×·ìµéÀº À½¼ö°ªÀ» »ç¿ëÇÏ¿© ÁöÁ¤µÈ´Ù. (F_SETSIG Àº SIGIO ´ë½Å¿¡ ´Ù¸¥ ½Ã±×³ÎÀ» ¸í½ÃÇϴµ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù. ¸¸ÀÏ ÆÄÀÏ ±â¼úÀÚ¿¡¼­ ÀÌ Ç÷¡±×¿¡ open(2) È£ÃâÀ» Á¦°øÇϰųª, fcntlÀÇ F_SETFL ¸í·ÉÀ» »ç¿ëÇÏ¿© O_ASYNC »óÅ Ç÷¡±×¸¦ ¼³Á¤ÇÏ·Á¸é, ÀÔ·Â ¶Ç´Â Ãâ·ÂÀÌ ±× ÆÄÀÏ ±â¼úÀÚ¿¡¼­ °¡´ÉÇÏ°Ô µÉ¶§¸¶´Ù, SIGIO ½Ã±×³ÎÀÌ Àü¼ÛµÈ´Ù.

½Ã±×³ÎÀ» ¼ö½ÅÇÒ ÇÁ·Î¼¼½º ȤÀº ÇÁ·Î¼¼½º ±×·ìÀº fcntl ÇÔ¼ö¿¡ ´ëÇÑ F_SETOWN ¸í·ÉÀ» »ç¿ëÇÔÀ¸·Î¼­ ¼±ÅÃµÉ ¼ö ÀÖ´Ù. ¸¸ÀÏ ÆÄÀÏ ±â¼úÀÚ°¡ ¼ÒÄÏÀ̸é, ÀÌ´Â ¶ÇÇÑ ´ë¿©ÆøÀ» ¹þ¾î³­ µ¥ÀÌÅÍ°¡ ±× ¼ÒÄÏ¿¡ µµÂøÇÒ¶§ Àü´ÞµÇ´Â SIGURG ½Ã±×³ÎÀÇ ¼ö½ÅÀÚ¸¦ ¼±ÅÃÇÑ´Ù. (SIGURG´Â select(2)´Â ¼ÒÄÏÀ» "¿¹¿ÜÀûÀÎ Á¶°Ç"À¸·Î º¸°íÇÏ´Â ¾î¶² »óȲ¿¡¼­µç Àü¼ÛµÈ´Ù. ¸¸ÀÏ ÆÄÀÏ ±â¼úÀÚ°¡ Å͹̳ΠÀåÄ¡¿Í ÀÏÄ¡ÇÑ´Ù¸é, SIGIO ½Ã±×³ÎµéÀº Å͹̳ÎÀÇ Æ÷±×¶ó¿îµå ÇÁ·Î¼¼½º ±×·ì¿¡ Àü¼ÛµÈ´Ù.

F_GETSIG
ÀÔ·Â ¶Ç´Â Ãâ·ÂÀÌ °¡´ÉÇØÁú ¶§, ½Ã±×³ÎÀÌ Àü¼ÛµÇµµ·Ï ÇÑ´Ù. Á¦·Î °ªÀº SIGIO°¡ Àü¼ÛµÇ¾ú´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ´Ù¸¥ °ª(SIGIOÀ» Æ÷ÇÔ)Àº ´ë½Å º¸³»Áø ½Ã±×³ÎÀÌ´Ù. ÀÌ·± °æ¿ì, SA_SIGINFO°¡ ¼³Ä¡µÇ¾î ÀÖÀ¸¸é, ½Ã±×³Î 󸮱⿡ ´ëÇÑ Ãß°¡ÀûÀÎ Á¤º¸°¡ »ç¿ë°¡´ÉÇÏ´Ù.
F_SETSIG
ÀÔ·Â ¶Ç´Â Ãâ·ÂÀÌ °¡´ÉÇØÁú¶§, ½Ã±×³ÎÀÌ Àü¼ÛµÇµµ·Ï ¼³Á¤ÇÑ´Ù. Á¦·Î °ªÀº µðÆúÆ® SGSIO ½Ã±×³ÎÀ» Àü¼ÛÇÏ´Â °ÍÀ» ÀǹÌÇÑ´Ù. ´Ù¸¥ °ª(SIGIOÀ» Æ÷ÇÔ)Àº ´ë½Å º¸³»Áø ½Ã±×³ÎÀÌ´Ù. ÀÌ·± °æ¿ì, SA_SIGINFO°¡ ¼³Ä¡µÇ¾î ÀÖÀ¸¸é, ½Ã±×³Î 󸮱⿡ ´ëÇÑ Ãß°¡ÀûÀÎ Á¤º¸°¡ »ç¿ë°¡´ÉÇÏ´Ù.

Á¦·Î°¡ ¾Æ´Ñ °ªÀ¸·Î F_SETSIGÀ» »ç¿ëÇÏ°í, ½Ã±×³Î 󸮱⿡ ´ëÇÑ SA_SIGINFO¸¦ ¼³Á¤( sigaction(2) ÂüÁ¶ÇÒ °Í)ÇÔÀ¸·Î¼­, ÀÔÃâ·Â(I/O À̺¥Æ®¿¡ ´ëÇÑ) ±âŸ Á¤º¸°¡ siginfo_t ³»ÀÇ Ã³¸®±â·Î Àü´ÞµÈ´Ù. si_code Çʵå´Â ¼Ò½º°¡ SI_SIGIO¶ó´Â °ÍÀ» °¡¸®Å°°í, si_fd Çʵå´Â ÆÄÀÏ ±â¼úÀÚ¿Í À̺¥Æ®¸¦ °ü·Ã½ÃŲ´Ù. ±×·¸Áö ¾ÊÀ¸¸é, ¾î¶² ÆÄÀÏ ±â¼úÀÚµéÀÌ °è·ùÁßÀΰ¡¿¡ ´ëÇÑ Áö½Ã°¡ ¾ø°í, ¿©·¯ºÐÀº ÀÔÃâ·Â(I/O)¿¡ »ç¿ë°¡´ÉÇÑ ÆÄÀÏ ±â¼úÀÚµéÀÌ ¾î¶² °ÍÀÎÁö¸¦ °áÁ¤Çϱâ À§ÇØ À¯¿ëÇÑ ¸ÞÄ¿´ÏÁò( (select(2), poll(2), read(2) O_NONBLOCK )À» »ç¿ëÇØ¾ß ÇÑ´Ù.

POSIX.1b ½Ç½Ã°£ ½Ã±×³Î(°ª >= SIGRTMIN)À» ¼±ÅÃÇÔÀ¸·Î¼­, ´ÙÁß ÀÔÃâ·Â À̺¥Æ®µéÀº µ¿ÀÏÇÑ ½Ã±×³Î ³Ñ¹öµéÀ» »ç¿ëÇÏ¿© ´ë±âÇà·Ä(Å¥)¿¡ ³ÖÀ» ¼ö ÀÖ´Ù. (Å¥´Â º¸Åë »ç¿ë°¡´ÉÇÑ ¸Þ¸ð¸®¿¡ ÀÇÁ¸ÀûÀÌ´Ù.) À§¿Í °°ÀÌ ½Ã±×³Î 󸮱⿡ ´ëÇØ SA_SIGINFO°¡ ¼³Á¤µÇ¸é, ±âŸ Á¤º¸°¡ »ç¿ë°¡´ÉÇÏ´Ù.

ÀÌ·¯ÇÑ ¸ÞÄ¿´ÏÁòÀ» »ç¿ëÇϸé, ÇÁ·Î±×·¥Àº ´ëºÎºÐÀÇ ½Ã°£À» select(2) ȤÀº poll(2)À» »ç¿ëÇÔ ¾øÀÌ, ºñµ¿±âÀû ÀÔÃâ·Â(I/O)À» ±¸ÇöÇÒ ¼ö ÀÖ´Ù.

O_ASYNC, F_GETOWN, F_SETOWN ÀÇ »ç¿ëÀº BSD ¹× ¸®´ª½º¿¡ ƯÁ¤ÀûÀÌ´Ù. F_GETSIG ¿Í F_SETSIG´Â ¸®´ª½º¿¡¸¸ ƯÁ¤ÀûÀÌ´Ù. POSIX´Â ºñ½ÁÇÑ °ÍµéÀ» ÀÌ·ç´Âµ¥ ºñµ¿±âÀû ÀÔÃâ·Â°ú aio_sigevent ±¸Á¶¸¦ ÀÌ¿ëÇÑ´Ù. ÀÌ·¯ÇÑ °ÍµéÀº ¶ÇÇÑ ¸®´ª½º¿¡¼­ GNU C ¶óÀ̺귯¸®(Glibc)ÀÇ ºÎºÐÀ¸·Î¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù.  

¹Ýȯ°ª

¼º°øÀûÀΠȣÃâ¿¡ ´ëÇÏ¿©, ¸®ÅÏ °ªÀº ¿¬»ê¿¡ ÀÇÁ¸ÀûÀÌ´Ù.
F_DUPFD
»õ·Î¿î ±â¼úÀÚ
F_GETFD
Ç÷¡±×ÀÇ °ª
F_GETFL
Ç÷¡±×ÀÇ °ª
F_GETOWN
±â¼úÀÚ ¼ÒÀ¯ÀÚÀÇ °ª
F_GETSIG
Àб⠶Ǵ ¾²±â°¡ °¡´ÉÇØÁ³À»¶§ Àü¼ÛµÈ ½Ã±×³ÎÀÇ °ªÀ̳ª, ÀüÅëÀûÀÎ SIGIO ÇàÀ§¿¡ ´ëÇÑ zero.
´Ù¸¥ ¸ðµç ¸í·É¾î
Zero.

¿¡·¯¸é, -1ÀÌ ¸®Åϵǰí, errno´Â ÀûÀýÇÏ°Ô ¼³Á¤µÈ´Ù.  

¿¡·¯

EACCES
¿¬»êÀº ´Ù¸¥ ÇÁ·Î¼¼½º¿¡ ÀÇÇÑ Àá±è¿¡ ÀÇÇØ ±ÝÁöµÈ´Ù.
EAGAIN
ÆÄÀÏÀÌ ´Ù¸¥ ÇÁ·Î¼¼½º¿¡ ÀÇÇØ ¸Þ¸ð¸® ¸ÅÇÎÀ̵Ǿú±â ¶§¹®¿¡, ¿¬»êÀº ¹æÇع޴´Ù.
EBADF
fd´Â ¿­¸° ÆÄÀÏ ±â¼úÀÚ°¡ ¾Æ´Ï´Ù.
EDEADLK
ÁöÁ¤µÈ F_SETLKW ¸í·ÉÀº DeadlockÀ» ÃÊ·¡ÇÒ °ÍÀ̶ó´Â °ÍÀÌ °¨ÁöµÇ¾ú´Ù.
EFAULT
lockÀº ¿©·¯ºÐÀÌ Á¢±ÙÇÒ ¼ö ÀÖ´Â ÁÖ¼Ò °ø°£ÀÇ ¹Ù±ù¿¡ ÀÖ´Ù.
EINTR
F_SETLKW¿¡ ´ëÇÏ¿©, ¸í·ÉÀº ½Ã±×³Î¿¡ ÀÇÇØ ÀÎÅÍ·´Æ®µÇ¾ú´Ù. F_GETLK°ú F_SETLK¿¡ ´ëÇÏ¿©, ¸í·ÉÀº Àá±èÀÌ Ã¼Å©µÇ°Å³ª, ÀÌ·ç¾îÁö±â Àü¿¡ ½Ã±×³Î¿¡ ÀÇÇØ ÀÎÅÍ·´Æ®µÇ¾ú´Ù. ¿ø°Ý ÆÄÀÏÀ» Àá±×´Â(NFS Àá±Ý) °ÍÀº º¸Åë ·ÎÄÿ¡¼­ ¹ß»ýÇÑ´Ù.
EINVAL
F_DUPFD¿¡ ´ëÇÏ¿©, argÀº À½¼ö °ªÀ̰ųª, Çã¿ëµÈ ÃÖ´ë°ªº¸´Ù´Â Å©´Ù. F_SETSIG¿¡ ´ëÇÏ¿©, argÀº Çã¿ëµÉ ¼ö ÀÖ´Â ½Ã±×³Î ³Ñ¹ö°¡ ¾Æ´Ï´Ù.
EMFILE
F_DUPFD¿¡ ´ëÇÏ¿©, ÇÁ·Î¼¼½º´Â ÀÌ¹Ì ÆÄÀÏ ±â¼úÀÚµéÀÇ ÃÖ´ë ³Ñ¹ö°¡ ¿­¸®µµ·Ï ÇÑ´Ù.
ENOLCK
³Ê¹«³ª ¸¹Àº ½Ã±×¸ÕÆ® Àá±ÝÀÌ ¿­·È°í, Àá±Ý Å×À̺íÀº ²Ëá°Å³ª, ¿ø°Ý Àá±Ý ÇÁ·ÎÅäÄÝÀÌ ½ÇÆÐÇÏ¿´´Ù. (NFS¸¦ ÅëÇØ Àá±×±â)
EPERM
Ãß°¡ ¼Ó¼ºÀÌ ÁöÁ¤µÇµµ·Ï ÇÏ´Â ÆÄÀÏ¿¡¼­ O_APPEND Ç÷¡±×¸¦ ¼Ò°ÅÇÏ°íÀÚ ÇÔ
 

ÁÖÀÇ

dup2¿¡ ÀÇÇØ ¸®ÅÏµÈ ¿¡·¯µéÀº F_DUPFD¿¡ ÀÇÇØ ¸®ÅÏµÈ ¿¡·¯µé°ú´Â ´Ù¸£´Ù.  

ȣȯ

SVr4, SVID, POSIX, X/OPEN, BSD 4.3. ¿ÀÁ÷ F_DUPFD, F_GETFD, F_SETFD, F_GETFL, F_SETFL, F_GETLK, F_SETLK ±×¸®°í F_SETLKWÀÇ ¿¬»êµé¸¸ÀÌ POSIX.1³»¿¡ ¸í½ÃµÇ¾î ÀÖ´Ù. F_GETOWN °ú F_SETOWN µéÀº SVr4¿¡¼­ Áö¿øµÇÁö ¾Ê´Â BSDismÀÌ´Ù.
 F_GETSIG °ú F_SETSIG´Â ¸®´ª½º¿¡ Æ¯Á¤ÀûÀÌ´Ù. F_GETFL/F_SETFL¿ë Ç÷¡±×µéÀº open(2)¿¡ ÀÇÇØ Áö¿øµÇ´Â Ç÷¡±×µéÀÌ°í, ½Ã½ºÅÛ¿¡ µû¶ó ´Ù¸£´Ù. O_APPEND, O_NONBLOCK, O_RDONLY, ±×¸®°í O_RDWRÀº POSIX.1³»¿¡ ¸í½ÃµÇ¾î ÀÖ´Ù. SVr4Àº ¿©±â¿¡¼­ ¹®¼­È­ÇÏÁö ¾ÊÀº ¸î°³ÀÇ ´Ù¸¥ ¿É¼Çµé°ú Ç÷¡±×¸¦ Áö¿øÇÑ´Ù.

SVr4´Â Ãß°¡ÀûÀÎ EIO, ENOLINK ±×¸®°í EOVERFLOW ¿¡·¯ Á¶°Çµé¿¡ ´ëÇÑ ¹®¼­È­¸¦ ÇÑ´Ù.  

°ü·Ã Ç׸ñ

dup2(2), open(2), socket(2), flock(2)  

¹ø¿ª

ASPLINUX <man@asp-linux.co.kr> 2000³â 7¿ù 29ÀÏ
ÇÑ±Û Manpage ÇÁ·ÎÁ§Æ® (http://man.kldp.org) 2005³â 2¿ù 17ÀÏ


 

Index

À̸§
»ç¿ë¹ý
¼³¸í
¹Ýȯ°ª
¿¡·¯
ÁÖÀÇ
ȣȯ
°ü·Ã Ç׸ñ
¹ø¿ª

This document was created by man2html, using the manual pages.
Time: 08:02:33 GMT, February 17, 2005