Rechercher une page de manuel
fcntl
Langue: ja
Version: 2005-05-20 (openSuse - 09/10/07)
Section: 2 (Appels système)
Sommaire
̾Á°
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);
ÀâÌÀ
fcntl() ¤Ï¡¢¥ª¡¼¥×¥ó¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿ fd ¤Ë´Ø¤·¤Æ²¼µ¤ÎÁàºî¤ò¹Ô¤¦¡£Áàºî¤Ï cmd ¤Ë¤è¤Ã¤Æ·è¤Þ¤ë:¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ÎÊ£À½
- F_DUPFD
- ÍøÍѲÄǽ¤Ê¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Î¤¦¤Á¡¢ arg °Ê¾å¤ÇºÇ¾®¤Î¤â¤Î¤òõ¤·¡¢ fd ¤Î¥³¥Ô¡¼¤È¤¹¤ë¡£¤³¤ì¤ÏÊ̤ηÁ¤Î dup2(2) ¤Ç¤¢¤ë¡£ dup2(2) ¤Ç¤Ï»ØÄꤵ¤ì¤¿¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬»È¤ï¤ì¤ëÅÀ¤¬°ã¤¦¡£
À®¸ù¤¹¤ë¤È¡¢¿·¤·¤¤¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬ÊÖ¤µ¤ì¤ë¡£
¾ÜºÙ¤Ï dup(2) ¤ò»²¾È¤Î¤³¤È¡£
¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¦¥Õ¥é¥°
°Ê²¼¤Î¥³¥Þ¥ó¥É¤ò»È¤Ã¤Æ¡¢¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ë´ØÏ¢¤¹¤ë¥Õ¥é¥° ¤òÁàºî¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£ ¸½ºß¤Î¤È¤³¤í¡¢ÄêµÁ¤µ¤ì¤Æ¤¤¤ë¥Õ¥é¥°¤Ï°ì¤Ä¤À¤±¤Ç¤¢¤ë: FD_CLOEXEC, close-on-exec ¥Õ¥é¥°¡£ FD_CLOEXEC ¥Ó¥Ã¥È¤¬ 0 ¤Ê¤é¡¢¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ï execve(2) ¤ò¹Ô¤Ã¤Æ¤â¥ª¡¼¥×¥ó¤µ¤ì¤¿¤Þ¤Þ¤À¤¬¡¢¤½¤¦¤Ç¤Ê¤¤¾ì¹ç¤Ï¥¯¥í¡¼¥º¤µ¤ì¤ë¡£- F_GETFD
- ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¦¥Õ¥é¥°¤òÆɤ߽Ф¹¡£
- F_SETFD
- ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¦¥Õ¥é¥°¤Ë arg ¤Ç»ØÄꤷ¤¿ÃͤòÀßÄꤹ¤ë¡£
¥Õ¥¡¥¤¥ë¾õÂ֥ե饰
¥ª¡¼¥×¥ó¥Õ¥¡¥¤¥ëµ½Ò (open file description) ¤Ë¤Ï¡¢ ¥Õ¥¡¥¤¥ëµ½ÒËè¤ËÀßÄꤵ¤ì¤ë¾õÂ֥ե饰¤¬¤¤¤¯¤Ä¤«¤¢¤ë¡£¤³¤ì¤é¤Î¥Õ¥é¥°¤Ï open(2) ¤Ë¤è¤Ã¤Æ½é´ü²½¤µ¤ì¡¢ fcntl(2) ¤Ë¤è¤êÊѹ¹¤¹¤ë¤³¤È¤â¤Ç¤¤ë¡£¤³¤ì¤é¤Ï¡¢ (dup(2), fcntl(F_DUPFD), fork(2) ¤Ê¤É¤Ç) Ê£À½¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿Æ±»Î¤Ï Ʊ¤¸¥ª¡¼¥×¥ó¥Õ¥¡¥¤¥ëµ½Ò¤ò»²¾È¤¹¤ë¡£ ¤½¤Î¤¿¤á¡¢ Ʊ¤¸¥Õ¥¡¥¤¥ë¾õÂ֥ե饰¤¬¶¦Í¤µ¤ì¤ë¡£¥Õ¥¡¥¤¥ë¾õÂ֥ե饰¤È¤½¤Î°ÕÌ£¤Ï open(2) ¤ÇÀâÌÀ¤µ¤ì¤Æ¤¤¤ë¡£
- F_GETFL
- ¥Õ¥¡¥¤¥ë¾õÂ֥ե饰¤òÆɤ߽Ф¹¡£
- F_SETFL
- ¥Õ¥¡¥¤¥ë¾õÂ֥ե饰¤Ë arg ¤Ç»ØÄꤵ¤ì¤¿ÃͤòÀßÄꤹ¤ë¡£ arg ¤Î¤¦¤Á¡¢¥Õ¥¡¥¤¥ë¤Î¥¢¥¯¥»¥¹¥â¡¼¥É (O_RDONLY, O_WRONLY, O_RDWR) ¤È¥Õ¥¡¥¤¥ëºîÀ®¥Õ¥é¥° (¤¹¤Ê¤ï¤Á O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC) ¤Ë´Ø¤¹¤ë¥Ó¥Ã¥È¤Ï̵»ë¤µ¤ì¤ë¡£ Linux ¤Ç¤Ï¡¢¤³¤Î¥³¥Þ¥ó¥É¤ÇÊѹ¹¤Ç¤¤ë¤Î¤Ï O_APPEND, O_ASYNC, O_DIRECT, O_NOATIME, O_NONBLOCK ¥Õ¥é¥°¤À¤±¤Ç¤¢¤ë¡£
¥¢¥É¥Ð¥¤¥¶¥ê¡¦¥í¥Ã¥¯
F_GETLK, F_SETLK, F_SETLKW ¤Ï¡¢¥ì¥³¡¼¥É¡¦¥í¥Ã¥¯¤Î³ÍÆÀ¡¿²òÊü¡¿¥Æ¥¹¥È¤Î¤¿¤á¤Ë»ÈÍѤ¹¤ë (¥ì¥³¡¼¥É¡¦¥í¥Ã¥¯¤Ï¥Õ¥¡¥¤¥ë¥»¥°¥á¥ó¥È¡¦¥í¥Ã¥¯¤ä ¥Õ¥¡¥¤¥ëÎΰè¥í¥Ã¥¯¤È¤â¸Æ¤Ð¤ì¤ë)¡£ »°ÈÖÌܤΰú¤¿ô lock ¤Ï¡¢°Ê²¼¤Ë¼¨¤¹¥Õ¥£¡¼¥ë¥É¤ò´Þ¤à¹½Â¤ÂΤؤΥݥ¤¥ó¥¿¤Ç¤¢¤ë (¥Õ¥£¡¼¥ë¥É¤Î½ç½ø¤Ï´Ø·¸¤Ê¤¯¡¢¹½Â¤ÂΤ˾¤Î¥Õ¥£¡¼¥ë¥É¤¬¤¢¤Ã¤Æ¤â¤è¤¤)¡£struct flock { ... short l_type; /* Type of lock: F_RDLCK, F_WRLCK, F_UNLCK */ short l_whence; /* How to interpret l_start: SEEK_SET, SEEK_CUR, SEEK_END */ off_t l_start; /* Starting offset for lock */ off_t l_len; /* Number of bytes to lock */ pid_t l_pid; /* PID of process blocking our lock (F_GETLK only) */ ... };¤³¤Î¹½Â¤ÂΤΠl_whence, l_start, l_len ¥Õ¥£¡¼¥ë¥É¤Ç¡¢¥í¥Ã¥¯¤ò¹Ô¤¤¤¿¤¤¥Ð¥¤¥ÈÈϰϤò»ØÄꤹ¤ë¡£ l_start ¤Ï¥í¥Ã¥¯¤ò¹Ô¤¦Îΰè¤Î³«»Ï¥ª¥Õ¥»¥Ã¥È¤Ç¤¢¤ë¡£ ¤½¤Î°ÕÌ£¤Ï l_whence ¤Ë¤è¤ê°Û¤Ê¤ë: l_whence ¤¬ SEEK_SET ¤Î¾ì¹ç¤Ï¥Õ¥¡¥¤¥ë¤ÎÀèƬ¤«¤é¤Î¥ª¥Õ¥»¥Ã¥È¡¢ l_whence ¤¬ SEEK_CUR ¤Î¾ì¹ç¤Ï¸½ºß¤Î¥Õ¥¡¥¤¥ë¥ª¥Õ¥»¥Ã¥È¤«¤é¤Î¥ª¥Õ¥»¥Ã¥È¡¢ l_whence ¤¬ SEEK_END ¤Î¾ì¹ç¤Ï¥Õ¥¡¥¤¥ë¤ÎËöÈø¤«¤é¤Î¥ª¥Õ¥»¥Ã¥È¤È²ò¼á¤µ¤ì¤ë¡£ ¸å¤í¤Î£²¤Ä¤Î¾ì¹ç¤Ë¤Ï¡¢ ¥Õ¥¡¥¤¥ë¤ÎÀèƬ¤è¤êÁ°¤Ë¤Ê¤é¤Ê¤¤ÈϰϤǡ¢ l_start ¤ËÉé¤ÎÃͤò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤¤ë¡£
l_len ¤Ï¥í¥Ã¥¯¤ò¹Ô¤¦Îΰè¤Î¥Ð¥¤¥È¿ô¤ò¼¨¤·¡¢ÈóÉé¤ÎÀ°¿ô¤Ç»ØÄꤹ¤ë (²¼µ¤Î Ãí°Õ¤Î¾Ï¤â»²¾È)¡£ ¥Ð¥¤¥È¿ô¤Î»ØÄê¤Ï¡¢¥Õ¥¡¥¤¥ë¤ÎËöÈø¤òĶ¤¨¤¿ÈϰϤޤǹԤäƤâ¤è¤¤¤¬¡¢ ¥Õ¥¡¥¤¥ë¤ÎÀèƬ¤è¤êÁ°¤Ë¤Ê¤Ã¤Æ¤Ï¤¤¤±¤Ê¤¤¡£ l_len ¤¬ 0 ¤Î¾ì¹ç¤ÏÆÃÊ̤ʰÕÌ£¤ò»ý¤Ä: l_whence and l_start ¤Ç»ØÄꤵ¤ì¤ë°ÌÃÖ¤«¤é¥Õ¥¡¥¤¥ë¤ÎËöÈø¤Þ¤Ç¤ÎÁ´¤Æ¤Î¥Ð¥¤¥È¤ò¥í¥Ã¥¯¤¹¤ë (¥Õ¥¡¥¤¥ë¤¬¤É¤ó¤Ê¤ËÂ礤¯¤Ê¤Ã¤¿¤È¤·¤Æ¤â¥Õ¥¡¥¤¥ë¤ÎËöÈø¤Þ¤Ç¥í¥Ã¥¯¤¹¤ë)¡£ l_type ¥Õ¥£¡¼¥ë¥É¤Ï¡¢¥Õ¥¡¥¤¥ë¤ËÂФ·¤ÆÆɤ߽Ф·¥í¥Ã¥¯ (F_RDLCK) ¤È½ñ¤¹þ¤ß¥í¥Ã¥¯ (F_WRLCK) ¤Î¤É¤Á¤é¤ò ÀßÄꤹ¤ë¤«¤ò»ØÄꤹ¤ë¡£ ¥Õ¥¡¥¤¥ë¤Î¤¢¤ëÎΰè¤ËÂФ·¤Æ¡¢Æɤ߽Ф·¥í¥Ã¥¯ (¶¦Í¥í¥Ã¥¯) ¤òÊÝ»ý¤Ç¤¤ë ¥×¥í¥»¥¹¿ô¤ËÀ©¸Â¤Ï¤Ê¤¤¤¬¡¢½ñ¤¹þ¤ß¥í¥Ã¥¯ (ÇÓ¾¥í¥Ã¥¯) ¤òÊÝ»ý¤Ç¤¤ë ¤Î¤Ï°ì¤Ä¤Î¥×¥í¥»¥¹¤À¤±¤Ç¤¢¤ë¡£ÇÓ¾¥í¥Ã¥¯¤òÀßÄꤹ¤ë¤È¡¢(¶¦Í¥í¥Ã¥¯¤« ÇÓ¾¥í¥Ã¥¯¤Ë¤«¤«¤ï¤é¤º) ¾¤Î¥í¥Ã¥¯¤Ï²¿¤âÀßÄê¤Ç¤¤Ê¤¤¡£ °ì¤Ä¤Î¥×¥í¥»¥¹¤Ï¡¢¥Õ¥¡¥¤¥ë¤Î¤¢¤ëÎΰè¤ËÂФ·¤Æ°ì¼ïÎà¤Î¥í¥Ã¥¯¤·¤«ÊÝ»ý¤Ç¤¤Ê¤¤¡£ ¿·µ¬¤Î¥í¥Ã¥¯¤¬¥í¥Ã¥¯¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ëÎΰè¤ËÂФ·¤ÆŬÍѤµ¤ì¤ë¤È¡¢´û¸¤Î¥í¥Ã¥¯ ¤Ï¿·µ¬¤Î¥í¥Ã¥¯¤Î¼ïÊ̤ËÊÑ´¹¤µ¤ì¤ë (¿·µ¬¤Î¥í¥Ã¥¯¤Ç»ØÄꤵ¤ì¤¿¥Ð¥¤¥ÈÈϰϤ¬´û¸¥í¥Ã¥¯¤ÎÈϰϤȰìÃפ¹¤ë¾ì¹ç°Ê³°¤Ç¤Ï¡¢ ÊÑ´¹¤Î²áÄø¤Ç´û¸¤Î¥í¥Ã¥¯¤Îʬ³ä¡¢½Ì¾®¡¢·ë¹ç¤¬¹Ô¤ï¤ì¤ë¤³¤È¤¬¤¢¤ë)¡£
- F_SETLK
- (l_type ¤¬ F_RDLCK ¤« F_WRLCK ¤Î¾ì¹ç¤Ï) ¥í¥Ã¥¯¤Î³ÍÆÀ¤ò¡¢ (F_UNLCK ¤Î¾ì¹ç¤Ï) ¥í¥Ã¥¯¤Î²òÊü¤ò¡¢ flock ¹½Â¤ÂΤΥե£¡¼¥ë¥É l_whence, l_start, l_len ¤Ç»ØÄꤵ¤ì¤¿ÈϰϤΥХ¤¥È¤ËÂФ·¤Æ¹Ô¤¦¡£ »ØÄꤵ¤ì¤¿¥í¥Ã¥¯¤¬Â¾¤Î¥×¥í¥»¥¹¤¬ÀßÄꤷ¤Æ¤¤¤ë¥í¥Ã¥¯¤È¾×Æͤ¹¤ë¾ì¹ç¤Ï¡¢ -1 ¤òÊÖ¤·¡¢ errno ¤Ë EACCES ¤« EAGAIN ¤òÀßÄꤹ¤ë¡£
- F_SETLKW
- F_SETLK ¤ÈƱÍͤÀ¤¬¡¢¤³¤Á¤é¤Ç¤Ï¤½¤Î¥Õ¥¡¥¤¥ë¤ËÂФ·¤Æ¾×Æͤ¹¤ë¥í¥Ã¥¯¤¬ ŬÍѤµ¤ì¤Æ¤¤¤¿¾ì¹ç¤Ë¡¢¤½¤Î¥í¥Ã¥¯¤¬²òÊü¤µ¤ì¤ë¤Î¤òÂÔ¤ÄÅÀ¤¬°Û¤Ê¤ë¡£ ÂԤäƤ¤¤ë´Ö¤Ë¥·¥°¥Ê¥ë¤ò¼õ¤±¤¿¾ì¹ç¤Ï¡¢¥·¥¹¥Æ¥à¥³¡¼¥ë¤ÏÃæÃǤµ¤ì¡¢ (¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤¬Ìá¤Ã¤¿Ä¾¸å¤Ë) ÊÖ¤êÃÍ -1 ¤òÊÖ¤¹ (¤Þ¤¿ errno ¤Ë EINTR ¤¬ÀßÄꤵ¤ì¤ë)¡£
- F_GETLK
- ¤³¤Î¥³¡¼¥ë¤Î¸Æ¤Ó½Ð¤·»þ¤Ë¤Ï¡¢ lock ¤Ë¤Ï¤½¤Î¥Õ¥¡¥¤¥ë¤ËŬÍѤ·¤è¤¦¤È¤¹¤ë¥í¥Ã¥¯¤Ë´Ø¤¹¤ë¾ðÊó¤¬Æþ¤Ã¤Æ¤¤¤ë¡£ ¥í¥Ã¥¯¤òŬÍѤǤ¤ë¾ì¹ç¤Ë¤Ï¡¢ fcntl() ¤Ï¼ÂºÝ¤Ë¤Ï¥í¥Ã¥¯¤ò¹Ô¤ï¤º¡¢¹½Â¤ÂÎ lock ¤Î l_type ¥Õ¥£¡¼¥ë¥É¤Ë F_UNLCK ¤òÀßÄꤷ¡¢Â¾¤Î¥Õ¥£¡¼¥ë¥É¤ÏÊѹ¹¤»¤º¤Ë¡¢Éüµ¢¤¹¤ë¡£ °ã¤¦¼ïÊ̤Υí¥Ã¥¯¤¬ (°ì¤Ä¤â¤·¤¯¤ÏÊ£¿ô) ŬÍѤµ¤ì¤Æ¤¤¤Æ ¥í¥Ã¥¯¤òŬÍѤǤ¤Ê¤¤¤è¤¦¤Ê¾ì¹ç¤Ë¤Ï¡¢ fcntl() ¤Ï¡¢¸¶°ø¤È¤Ê¤Ã¤¿¥í¥Ã¥¯¤Î°ì¤Ä¤Ë¤Ä¤¤¤Æ¤Î¾ÜºÙ¾ðÊó¤ò¹½Â¤ÂÎ lock ¤Î¥Õ¥£¡¼¥ë¥É l_type, l_whence, l_start, l_len ¤Ë³ÊǼ¤·¡¢¤Þ¤¿ l_pid ¤Ë¥í¥Ã¥¯¤òÊÝ»ý¤·¤Æ¤¤¤ë¥×¥í¥»¥¹¤Î PID ¤òÀßÄꤷ¤Æ¡¢Éüµ¢¤¹¤ë¡£ Æɤ߽Ф·¥í¥Ã¥¯¤òŬÍѤ¹¤ë¤Ë¤Ï¡¢ fd ¤ÏÆɤ߽Ф·ÍѤ˥ª¡¼¥×¥ó¤µ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ ½ñ¤¹þ¤ß¥í¥Ã¥¯¤òŬÍѤ¹¤ë¤Ë¤Ï¡¢ fd ¤Ï½ñ¤¹þ¤ßÍѤ˥ª¡¼¥×¥ó¤µ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ Æɤ߽ñ¤Î¾Êý¤Î¥í¥Ã¥¯¤òŬÍѤ¹¤ë¤Ë¤Ï¡¢Æɤ߽ñ¤Î¾ÍÑ¤Ç ¥Õ¥¡¥¤¥ë¤ò¥ª¡¼¥×¥ó¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ ¥ì¥³¡¼¥É¤Î¥í¥Ã¥¯¤Ï¡¢ F_UNLCK ¤Ë¤è¤êÌÀ¼¨Åª¤Ëºï½ü¤µ¤ì¤ë¤À¤±¤Ç¤Ê¤¯¡¢ ¥×¥í¥»¥¹¤¬½ªÎ»¤·¤¿¤È¤¤ä¡¢¥í¥Ã¥¯¤¬Å¬ÍѤµ¤ì¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¤ò»²¾È¤·¤Æ¤¤¤ë ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Î¤¤¤º¤ì¤«¤¬¥¯¥í¡¼¥º¤µ¤ì¤¿¾ì¹ç¤Ë¤â²òÊü¤µ¤ì¤ë¡£ ¤³¤Î¥í¥Ã¥¯¤Î²òÊü¤Ï¼«Æ°Åª¤Ë¹Ô¤ï¤ì¤ë¡£ ¤³¤ÎÆ°ºî¤Ï¤Þ¤º¤¤: ¤¢¤ë¥×¥í¥»¥¹¤¬ /etc/passwd ¤ä /etc/mtab ¤È¤¤¤Ã¤¿¥Õ¥¡¥¤¥ë¤Ë¥í¥Ã¥¯¤òŬÍѤ·¤Æ¤¤¤ë¤È¤¤Ë¡¢ ¤¢¤ë¥é¥¤¥Ö¥é¥ê´Ø¿ô¤¬²¿¤«¤ÎÍýͳ¤ÇƱ¤¸¥Õ¥¡¥¤¥ë¤ò open, read, close ¤¹¤ë¤È¡¢¤½¤Î¥Õ¥¡¥¤¥ë¤Ø¤Î¥í¥Ã¥¯¤¬¼º¤ï¤ì¤ë¤³¤È¤Ë¤Ê¤ë¡£ ¥ì¥³¡¼¥É¤Î¥í¥Ã¥¯¤Ï fork(2) ¤ÇºîÀ®¤µ¤ì¤¿»Ò¥×¥í¥»¥¹¤Ë¤Ï·Ñ¾µ¤µ¤ì¤Ê¤¤¤¬¡¢ execve(2) ¤ÎÁ°¸å¤Ç¤ÏÊݸ¤µ¤ì¤ë¡£ stdio(3) ¤Ç¤Ï¥Ð¥Ã¥Õ¥¡¥ê¥ó¥°¤¬¹Ô¤ï¤ì¤ë¤Î¤Ç¡¢ stdio ´ØÏ¢¤Î´Ø¿ô¤Ç¤Ï¥ì¥³¡¼¥É¤Î¥í¥Ã¥¯¤Î»ÈÍѤϲóÈò¤µ¤ì¤ë; Âå¤ï¤ê¤Ë read(2) ¤ä write(2) ¤ò»ÈÍѤ¹¤ë¤³¤È¡£
¶¯À©¥í¥Ã¥¯ (mandatory locking)
¾å½Ò¤Î¥í¥Ã¥¯¤Ë¤Ï¥¢¥É¥Ð¥¤¥¶¥ê¡¦¥í¥Ã¥¯ (advisory lock) ¤È¶¯À©¥í¥Ã¥¯ (mandatory lock) ¤ÎÆó¼ïÎब¤¢¤ë¤¬¡¢¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¥¢¥É¥Ð¥¤¥¶¥ê¡¦¥í¥Ã¥¯¤È¤Ê¤ë¡£¥¢¥É¥Ð¥¤¥¶¥ê¡¦¥í¥Ã¥¯¤Ë¶¯À©ÎϤϤʤ¯¡¢¶¨Ä´¤·¤ÆÆ°ºî¤¹¤ë¥×¥í¥»¥¹´Ö¤Ç¤Î¤ß ͸ú¤Ç¤¢¤ë¡£
¶¯À©¥í¥Ã¥¯¤ÏÁ´¤Æ¤Î¥×¥í¥»¥¹¤ËÂФ·¤Æ¸ú²Ì¤¬¤¢¤ë¡£ ¤¢¤ë¥×¥í¥»¥¹¤¬¸ß´¹À¤Î¤Ê¤¤¶¯À©¥í¥Ã¥¯¤¬Å¬ÍѤµ¤ì¤¿¥Õ¥¡¥¤¥ëÎΰè¤ËÂФ·¤Æ (read(2) ¤ä write(2) ¤Ë¤è¤ê) ¸ß´¹À¤Î¤Ê¤¤¥¢¥¯¥»¥¹¤ò¼Â¹Ô¤·¤è¤¦¤È¤·¤¿¾ì¹ç¡¢ ¥¢¥¯¥»¥¹¤Î·ë²Ì¤Ï ¤½¤Î¥Õ¥¡¥¤¥ë¤Î¥ª¡¼¥×¥ó¥Õ¥¡¥¤¥ëµ½Ò¤Ç O_NONBLOCK ¥Õ¥é¥°¤¬Í¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤«¤Ë¤è¤ê·è¤Þ¤ë¡£ O_NONBLOCK ¥Õ¥é¥°¤¬Í¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤Ê¤¤¤È¤¤Ï¡¢¥í¥Ã¥¯¤¬ºï½ü¤µ¤ì¤ë¤«¡¢ ¥í¥Ã¥¯¤¬¥¢¥¯¥»¥¹¤È¸ß´¹À¤Î¤¢¤ë¥â¡¼¥É¤ËÊÑ´¹¤µ¤ì¤ë¤Þ¤Ç¡¢ ¥·¥¹¥Æ¥à¥³¡¼¥ë¤ÏÄä»ß (block) ¤µ¤ì¤ë¡£ O_NONBLOCK ¥Õ¥é¥°¤¬Í¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤È¤¤Ï¡¢¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï¥¨¥é¡¼ EAGAIN ¤« EWOULDBLOCK ¤Ç¼ºÇÔ¤¹¤ë¡£
¶¯À©¥í¥Ã¥¯¤ò»ÈÍѤ¹¤ë¤¿¤á¤Ë¤Ï¡¢¥í¥Ã¥¯ÂоݤΥե¡¥¤¥ë¤¬´Þ¤Þ¤ì¤ë¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à ¤È¡¢¥í¥Ã¥¯ÂоݤΥե¡¥¤¥ë¼«¿È¤ÎξÊý¤Ë¤Ä¤¤¤Æ¡¢¶¯À©¥í¥Ã¥¯¤¬Í¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤Ê¤±¤ì ¤Ð¤Ê¤é¤Ê¤¤¡£¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Ë¤Ä¤¤¤Æ¶¯À©¥í¥Ã¥¯¤ò͸ú¤Ë¤¹¤ë¤Ë¤Ï¡¢ mount(8) ¤Ë "-o mand" ¥ª¥×¥·¥ç¥ó¤òÅϤ¹¤«¡¢ mount(2) ¤Ë MS_MANDLOCK ¥Õ¥é¥°¤ò»ØÄꤹ¤ë¡£¥Õ¥¡¥¤¥ë¤Ë¤Ä¤¤¤Æ¶¯À©¥í¥Ã¥¯¤ò͸ú¤Ë¤¹¤ë¤Ë¤Ï¡¢ ¤½¤Î¥Õ¥¡¥¤¥ë¤Î¥°¥ë¡¼¥×¼Â¹Ôµö²Ä (group execute permission) ¤ò̵¸ú¤È¤·¡¢ ¤«¤Ä set-group-ID µö²Ä¥Ó¥Ã¥È¤ò͸ú¤Ë¤¹¤ë (chmod(1) ¤È chmod(2) ¤ò»²¾È)¡£
¥·¥°¥Ê¥ë¤Î´ÉÍý
F_GETOWN, F_SETOWN, F_GETSIG, F_SETSIG ¤Ï¡¢I/O ¤¬ÍøÍѲÄǽ¤Ë¤Ê¤Ã¤¿¤³¤È¤ò¼¨¤¹¥·¥°¥Ê¥ë¤ò´ÉÍý¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¡£- F_GETOWN
- ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿ fd ¤Î¥¤¥Ù¥ó¥È¤ËÂФ¹¤ë¥·¥°¥Ê¥ë SIGIO ¤ª¤è¤Ó SIGURG ¤ò¼õ¤±¤Æ¤¤¤ë ¥×¥í¥»¥¹¤Î¥×¥í¥»¥¹ID ¤«¥×¥í¥»¥¹¥°¥ë¡¼¥×¤ò¼èÆÀ¤¹¤ë¡£ ¥×¥í¥»¥¹ID ¤ÏÀµ¤ÎÃͤȤ·¤ÆÊÖ¤µ¤ì¤ë¡£ ¥×¥í¥»¥¹¥°¥ë¡¼¥×ID ¤ÏÉé¤ÎÃͤȤ·¤ÆÊÖ¤µ¤ì¤ë (²¼µ¤Î¥Ð¥°¤Î¾Ï¤ò»²¾È)¡£
- F_SETOWN
- ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿ fd ¤Î¥¤¥Ù¥ó¥ÈȯÀ¸¤òÃΤ餻¤ë¥·¥°¥Ê¥ë SIGIO ¤« SIGURG ¤ò¼õ¤±¤ë¥×¥í¥»¥¹¤Î ¥×¥í¥»¥¹ ID ¤Þ¤¿¤Ï¥×¥í¥»¥¹¥°¥ë¡¼¥×ID ¤òÀßÄꤹ¤ë¡£ ¥×¥í¥»¥¹ID ¤ÏÀµ¤ÎÃͤȤ·¤Æ»ØÄꤷ¡¢ ¥×¥í¥»¥¹¥°¥ë¡¼¥×ID ¤ÏÉé¤ÎÃͤȤ·¤Æ»ØÄꤹ¤ë¡£ ¤Û¤È¤ó¤É¤Î¾ì¹ç¡¢¸Æ¤Ó½Ð¤·¸µ¥×¥í¥»¥¹¤Ï½êͼԤȤ·¤Æ¼«Ê¬¼«¿È¤ò»ØÄꤹ¤ë (¤Ä¤Þ¤ê arg ¤Ë getpid(2) ¤ò»ØÄꤹ¤ë)¡£
fcntl() ¤Î F_SETFL ¥³¥Þ¥ó¥É¤ò»ÈÍѤ·¤Æ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ë O_ASYNC ¾õÂ֥ե饰¤òÀßÄꤷ¤¿¾ì¹ç¤Ë¤Ï¡¢¤½¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ø¤Î Æþ½ÐÎϤ¬²Äǽ¤Ë¤Ê¤ëÅÙ¤Ë SIGIO ¥·¥°¥Ê¥ë¤¬Á÷¤é¤ì¤ë¡£ F_SETSIG ¤Ï SIGIO °Ê³°¤ÎÊ̤Υ·¥°¥Ê¥ë¤ÎÇÛÁ÷¤ò¼õ¤±¤é¤ì¤ë¤è¤¦¤Ë ¤¹¤ë¤Î¤Ë¤â»È¤¦¤³¤È¤¬¤Ç¤¤ë¡£ µö²Ä (permission) ¤Î¥Á¥§¥Ã¥¯¤Ç¼ºÇÔ¤·¤¿¾ì¹ç¤Ë¤Ï¡¢ ¥·¥°¥Ê¥ë¤ÏÌۤäƼΤƤé¤ì¤ë¡£
F_SETOWN ¤Ë¤è¤ê»ØÄꤵ¤ì¤¿½êÍ¼Ô¤Î¥×¥í¥»¥¹ (¤Þ¤¿¤Ï¥×¥í¥»¥¹¥°¥ë¡¼¥×) ¤Ë ¥·¥°¥Ê¥ë¤òÁ÷¤ëºÝ¤Ë¤Ï¡¢ kill(2) ¤Ë½ñ¤«¤ì¤Æ¤¤¤ë¤Î¤ÈƱ¤¸µö²Ä¤Î¥Á¥§¥Ã¥¯¤¬¹Ô¤ï¤ì¤ë¡£ ¤³¤Î¤È¤¡¢¥·¥°¥Ê¥ë¤òÁ÷¿®¤¹¤ë¥×¥í¥»¥¹¤Ï F_SETOWN ¤ò»È¤Ã¤¿¥×¥í¥»¥¹¤Ç¤¢¤ë (⤷¡¢²¼µ¤Î¡Ö¥Ð¥°¡×¤Î¾Ï¤ò»²¾È¤Î¤³¤È)¡£
¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬¥½¥±¥Ã¥È¤ò»²¾È¤·¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢ F_SETOWN ¤ò»ÈÍѤ·¤Æ¡¢¥½¥±¥Ã¥È¤ËÂÓ°è³° (out-of-band) ¥Ç¡¼¥¿¤¬ÆϤ¤¤¿»þ¤Ë SIGURG ¥·¥°¥Ê¥ë¤òÇÛÁ÷¤¹¤ëÁê¼ê¤òÁªÂò¤¹¤ë¤³¤È¤â¤Ç¤¤ë (SIGURG ¤¬Á÷¤é¤ì¤¿¾ì¹ç¤Ë¤Ï select(2) ¤¬¥½¥±¥Ã¥È¤¬¡ÖÆÃÊ̤ʾõÂ֡פˤ¢¤ë¤ÈÊó¹ð¤¹¤ë¤³¤È¤À¤í¤¦)¡£
¥¹¥ì¥Ã¥É¥°¥ë¡¼¥×¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¥¹¥ì¥Ã¥É¥é¥¤¥Ö¥é¥ê (Î㤨¤Ð NPTL) ¤ò »È¤Ã¤ÆÆ°ºî¤·¤Æ¤¤¤ë¥Þ¥ë¥Á¥¹¥ì¥Ã¥É¡¦¥×¥í¥»¥¹¤Ç F_SETSIG ¤Ë 0 °Ê³°¤ÎÃͤò»ØÄꤷ¤¿¾ì¹ç¡¢ F_SETOWN ¤ËÀµ¤ÎÃͤòÅϤ¹¤È¡¢¤½¤Î°ÕÌ£¤¬°ã¤Ã¤Æ¤¯¤ë: ¥×¥í¥»¥¹Á´ÂΤò¼¨¤¹¥×¥í¥»¥¹ID ¤Ç¤Ï¤Ê¤¯¡¢¥×¥í¥»¥¹Æâ¤ÎÆÃÄê¤Î ¥¹¥ì¥Ã¥É¤ò¼¨¤¹¥¹¥ì¥Ã¥ÉID ¤È²ò¼á¤µ¤ì¤ë¡£ ¤·¤¿¤¬¤Ã¤Æ¡¢ F_SETSIG ¤ò»È¤¦¾ì¹ç¤Ë¤Ï¡¢¤¤Á¤ó¤È·ë²Ì¤ò¼õ¤±¼è¤ë¤Ë¤Ï¡¢ F_SETOWN ¤ËÅϤ¹Ãͤò getpid(2) ¤Ç¤Ï¤Ê¤¯ gettid(2) ¤ÎÊÖ¤êÃͤˤ¹¤ëɬÍפ¬¤¢¤ë¤À¤í¤¦¡£ (¸½¾õ¤Î Linux ¥¹¥ì¥Ã¥É¼ÂÁõ¤Ç¤Ï¡¢¥á¥¤¥ó¡¦¥¹¥ì¥Ã¥É¤Î¥¹¥ì¥Ã¥ÉID ¤Ï ¤½¤Î¥¹¥ì¥Ã¥É¤Î¥×¥í¥»¥¹ID ¤ÈƱ¤¸¤Ç¤¢¤ë¡£¤Ä¤Þ¤ê¡¢ ¥·¥°¥Ê¥ë¡¦¥¹¥ì¥Ã¥É¤Î¥×¥í¥°¥é¥à¤Ç¤Ï¤³¤Î¾ì¹ç gettid(2) ¤È getpid(2) ¤ÏÁ´¤¯Æ±¤¸¤è¤¦¤Ë»È¤¦¤³¤È¤¬¤Ç¤¤ë¡£) ¤¿¤À¤·¡¢Ãí°Õ¤¹¤Ù¤ÅÀ¤È¤·¤Æ¡¢¤³¤ÎÃÊÍî¤Ç½Ò¤Ù¤¿¤³¤È¤Ï¡¢ ¥½¥±¥Ã¥È¤ÎÂÓ°è³°¥Ç¡¼¥¿¤¬ÆϤ¤¤¿¤È¤¤ËÀ¸À®¤µ¤ì¤ë SIGURG ¥·¥°¥Ê¥ë¤Ë¤Ï ¤¢¤Æ¤Ï¤Þ¤é¤Ê¤¤¡£¤³¤Î¥·¥°¥Ê¥ë¤Ï¾ï¤Ë¥×¥í¥»¥¹¤«¥×¥í¥»¥¹¥°¥ë¡¼¥×¤ËÁ÷¤é¤ì¡¢ Á÷¿®Àè¤Ï F_SETOWN ¤ËÅϤµ¤ì¤¿Ãͤˤ·¤¿¤¬¤Ã¤Æ·è¤á¤ë¡£ ¤Þ¤¿¡¢°Ê²¼¤ÎÅÀ¤Ë¤âÃí°Õ¤¹¤ë¤³¤È¡£ Linux ¤Ç¤Ï°ì¤Ä¤Î¥×¥í¥»¥¹¤ËÂФ·¤Æ¥¥å¡¼¤ËÆþ¤ì¤é¤ì¤ë¥ê¥¢¥ë¥¿¥¤¥à ¥·¥°¥Ê¥ë¤Î¿ô¤Ë¾å¸Â¤¬Àߤ±¤é¤ì¤Æ¤ª¤ê (getrlimit(2) ¤È signal(7) ¤ò»²¾È)¡¢¤³¤Î¾å¸Â¤Ë㤹¤ë¤È¥«¡¼¥Í¥ë¤Ï SIGIO ¥·¥°¥Ê¥ë¤òÇÛÁ÷¤¹¤ë¡£ ¤³¤Î SIGIO ¥·¥°¥Ê¥ë¤Ï¡¢»ØÄꤵ¤ì¤¿¥¹¥ì¥Ã¥É¤Ç¤Ï¤Ê¤¯¥×¥í¥»¥¹Á´ÂΤËÁ÷¤é¤ì¤ë¡£
- F_GETSIG
- ÆþÎϤä½ÐÎϤ¬²Äǽ¤Ë¤Ê¤Ã¤¿¾ì¹ç¤ËÁ÷¤ë¥·¥°¥Ê¥ë¤ò¼èÆÀ¤¹¤ë¡£ ÃÍ¥¼¥í¤Ï SIGIO ¤òÁ÷¤ë¤³¤È¤ò°ÕÌ£¤¹¤ë¡£(SIGIO ¤ò´Þ¤à) ¾¤ÎÃͤϤ¤¤º¤ì¤â¡¢ SIGIO ¤ÎÂå¤ï¤ê¤ËÁ÷¤ë¥·¥°¥Ê¥ëÈÖ¹æ¤òɽ¤¹¡£ ¸å¼Ô¤Î¾ì¹ç¡¢¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤ò SA_SIGINFO ¥Õ¥é¥° ÉÕ¤¤ÇÀßÄꤹ¤ì¤Ð¡¢¥Ï¥ó¥É¥é¤ÇÄɲäξðÊó¤òÆÀ¤ë¤³¤È¤¬¤Ç¤¤ë¡£
- F_SETSIG
- ÆþÎϤä½ÐÎϤ¬²Äǽ¤Ë¤Ê¤Ã¤¿¾ì¹ç¤ËÁ÷¤ë¥·¥°¥Ê¥ë¤òÀßÄꤹ¤ë¡£ ÃÍ¥¼¥í¤Ï SIGIO ¤òÁ÷¤ë¤³¤È¤ò°ÕÌ£¤¹¤ë¡£(SIGIO ¤ò´Þ¤à) ¾¤ÎÃͤϤ¤¤º¤ì¤â¡¢ SIGIO ¤ÎÂå¤ï¤ê¤ËÁ÷¤ë¥·¥°¥Ê¥ëÈÖ¹æ¤òɽ¤¹¡£ ¸å¼Ô¤Î¾ì¹ç¡¢¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤ò SA_SIGINFO ¥Õ¥é¥°ÉÕ¤¤ÇÀßÄꤹ¤ì¤Ð¡¢ ¥Ï¥ó¥É¥é¤ÇÄɲäξðÊó¤òÆÀ¤ë¤³¤È¤¬¤Ç¤¤ë¡£
¤Þ¤¿¡¢ F_SETSIG ¤Ë 0 °Ê³°¤ÎÃͤòÅϤ¹¤È¡¢¥·¥°¥Ê¥ë¤Î¼õ¿®¼Ô¤ò¥×¥í¥»¥¹Á´ÂΤ«¤é ¥×¥í¥»¥¹Æâ¤ÎÆÃÄê¤Î¥¹¥ì¥Ã¥É¤ËÊѹ¹¤µ¤ì¤ë¡£¾ÜºÙ¤Ï F_SETOWN ¤ÎÀâÌÀ¤ò»²¾È¤Î¤³¤È¡£
F_SETSIG ¤Ë¥¼¥í°Ê³°¤ÎÃͤòÀßÄꤷ¡¢¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤Ë SA_SIGINFO ¥Õ¥é¥°¤ò ÀßÄꤹ¤ë¤È¡¢ (sigaction(2) ¤ò»²¾È) I/O ¥¤¥Ù¥ó¥È¤Ë´Ø¤¹¤ëÄɲäξðÊó¤¬ siginfo_t ¹½Â¤ÂΤǥ·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤ØÅϤµ¤ì¤ë¡£ si_code ¥Õ¥£¡¼¥ë¥É¤¬¼¨¤¹¥·¥°¥Ê¥ë¤Î¸¶°ø¤¬ SI_SIGIO ¤Ç¤¢¤ë¾ì¹ç¡¢ si_fd ¥Õ¥£¡¼¥ë¥É¤Ë¤Ï¥¤¥Ù¥ó¥È¤ËÂбþ¤¹¤ë¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬Æþ¤Ã¤Æ¤¤¤ë¡£ ¤½¤ì°Ê³°¤Î¾ì¹ç¤Ï¡¢¤É¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬ÍøÍѲÄǽ¤«¤ò¼¨¤¹¾ðÊó¤Ï ¤Ê¤¤¤Î¤Ç¡¢¤É¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ç I/O ¤¬²Äǽ¤«¤òȽÃǤ¹¤ë¤¿¤á¤Ë¤Ï Ä̾ï¤Îµ¡¹½ (select(2), poll(2), O_NONBLOCK ¤òÀßÄꤷ¤¿ read(2) ¤Ê¤É) ¤ò»ÈÍѤ·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
¥ê¥¢¥ë¥¿¥¤¥à¥·¥°¥Ê¥ë (Ãͤ¬ SIGRTMIN °Ê¾å) ¤òÁªÂò¤·¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢ Ʊ¤¸¥·¥°¥Ê¥ëÈÖ¹æ¤ò»ý¤ÄÊ£¿ô¤Î I/O ¥¤¥Ù¥ó¥È¤¬¥¥å¡¼¤ËÆþ¤ë¤³¤È¤¬¤¢¤ë (¥¥å¡¼¤ËÆþ¤ì¤ë¤«¤É¤¦¤«¤ÏÍøÍѲÄǽ¤Ê¥á¥â¥ê¤Ë°Í¸¤·¤Æ¤¤¤ë)¡£ ¾åµ¤ÈƱÍÍ¡¢ SA_SIGINFO ¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¡¢¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤Î ¤¿¤á¤ÎÄɲäξðÊó¤¬ÆÀ¤é¤ì¤ë¡£
¤³¤ì¤é¤Îµ¡¹½¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¡¢¤Û¤È¤ó¤É¤Î¾ì¹ç¤Ç select(2) ¤ä poll(2) ¤ò»ÈÍѤ»¤º¤Ë´°Á´¤ÊÈóƱ´ü I/O ¤ò¼ÂÁõ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£
O_ASYNC, F_GETOWN, F_SETOWN ¤Î»ÈÍÑ¤Ï BSD ¤È Linux ¤ËÆÃͤǤ¢¤ë¡£ F_GETSIG ¤È F_SETSIG ¤Ï Linux ¸ÇͤǤ¢¤ë¡£POSIX ¤Ë¤Ï¡¢Æ±ÍͤΤ³¤È¤ò¹Ô¤¦¤¿¤á¤Ë¡¢ÈóƱ´ü I/O ¤È aio_sigevent ¹½Â¤ÂΤ¬¤¢¤ë¡£Linux ¤Ç¤Ï¡¢GNU C ¥é¥¤¥Ö¥é¥ê (Glibc) ¤Î°ìÉô¤È¤·¤Æ ¤³¤ì¤é¤âÍøÍѲÄǽ¤Ç¤¢¤ë¡£
¥ê¡¼¥¹ (leases)
(Linix 2.4 °Ê¹ß¤ÇÍøÍѲÄǽ) F_SETLEASE ¤Ï¡¢¸Æ¤Ó½Ð¤·¸µ¥×¥í¥»¥¹¤¬ fd ¤¬»²¾È¤¹¤ë¥Õ¥¡¥¤¥ë¤ËÂФ¹¤ë¥ê¡¼¥¹¤òÀßÄꤹ¤ë¤Î¤Ë»ÈÍѤµ¤ì¤ë¡£ F_GETLEASE ¤Ï¡¢¸Æ¤Ó½Ð¤·¸µ¥×¥í¥»¥¹¤¬ fd ¤¬»²¾È¤¹¤ë¥Õ¥¡¥¤¥ë¤ËÂФ·¤ÆÊÝ»ý¤·¤Æ¤¤¤ë¥ê¡¼¥¹¤Î¸½ºß¤ÎÀßÄê¤ò ¼èÆÀ¤¹¤ë¤Î¤Ë»ÈÍѤµ¤ì¤ë¡£ ¥Õ¥¡¥¤¥ë¤Î¥ê¡¼¥¹¤Ë¤è¤ê¡¢ ¤¢¤ë¥×¥í¥»¥¹ ("lease breaker") ¤¬¤½¤Î¥Õ¥¡¥¤¥ë¤ËÂФ·¤Æ open(2) ¤ä truncate(2) ¤ò¹Ô¤ª¤¦¤È¤·¤¿ºÝ¤Ë¡¢¥ê¡¼¥¹¤òÊÝ»ý¤·¤Æ¤¤¤ë¥×¥í¥»¥¹ ("lease holder") ¤Ø (¥·¥°¥Ê¥ë¤ÎÇÛÁ÷¤Ë¤è¤ë) ÄÌÃΤ¬¹Ô¤ï¤ì¤ë¤È¤¤¤¦µ¡¹½¤¬Ä󶡤µ¤ì¤ë¡£- F_SETLEASE
- arg ¤ÎÆâÍƤ˴𤤤ƥե¡¥¤¥ë¤Î¥ê¡¼¥¹¤ÎÀßÄê¡¢ºï½ü¤ò¹Ô¤¦¡£À°¿ô arg ¤Ë¤Ï°Ê²¼¤ÎÃͤ¬»ØÄê¤Ç¤¤ë:
- F_RDLCK Æɤ߽Ф·¥ê¡¼¥¹¤ò¼èÆÀ¤¹¤ë¡£¤³¤ì¤Ë¤è¤ê¡¢ ¤½¤Î¥Õ¥¡¥¤¥ë¤¬½ñ¤¹þ¤ßÍѤ˥ª¡¼¥×¥ó¤µ¤ì¤¿¤ê¡¢¥Õ¥¡¥¤¥ë¤¬ÀÚ¤êµÍ¤á¤é¤ì¤¿¾ì¹ç¤Ë¡¢ ¸Æ¤Ó½Ð¤·¸µ¤Î¥×¥í¥»¥¹¤ËÄÌÃΤ¬¹Ô¤ï¤ì¤ë¤è¤¦¤Ë¤Ê¤ë¡£ Æɤ߽Ф·¥ê¡¼¥¹¤òÀßÄê¤Ç¤¤ë¤Î¤Ï¡¢Æɤ߽Ф·ÀìÍѤǥª¡¼¥×¥ó¤µ¤ì¤Æ¤¤¤ë ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ËÂФ·¤Æ¤Î¤ß¤Ç¤¢¤ë¡£
-
- F_WRLCK
- ½ñ¤¹þ¤ß¥ê¡¼¥¹¤ò¼èÆÀ¤¹¤ë¡£¤³¤ì¤Ë¤è¤ê¡¢ (Æɤ߽Ф·ÍѤ«½ñ¤¹þ¤ßÍѤˤ«¤«¤ï¤é¤º) ¤½¤Î¥Õ¥¡¥¤¥ë¤¬¥ª¡¼¥×¥ó¤µ¤ì¤¿¤ê¡¢ ¥Õ¥¡¥¤¥ë¤¬ÀÚ¤êµÍ¤á¤é¤ì¤¿¾ì¹ç¤Ë¡¢¸Æ¤Ó½Ð¤·¸µ¤Î¥×¥í¥»¥¹¤ËÄÌÃΤ¬¹Ô¤ï¤ì¤ë¤è¤¦¤Ë¤Ê¤ë¡£ ½ñ¤¹þ¤ß¥ê¡¼¥¹¤Ï¡¢¤½¤Î¥Õ¥¡¥¤¥ë¤ò¥ª¡¼¥×¥ó¤·¤Æ¤¤¤ë¥×¥í¥»¥¹¤¬Â¾¤Ë¤Ê¤¤¾ì¹ç¤Ë¤Î¤ß ÀßÄê¤Ç¤¤ë¡£
- F_UNLCK
- ¤½¤Î¥Õ¥¡¥¤¥ë¤«¤é¥ê¡¼¥¹¤òºï½ü¤¹¤ë¡£
- F_GETLEASE
- fd ¤¬»²¾È¤¹¤ë¥Õ¥¡¥¤¥ë¤ËÂФ·¤ÆÊÝ»ý¤·¤Æ¤¤¤ë¥ê¡¼¥¹¤Î¼ïÊ̤ò¼èÆÀ¤¹¤ë¡£ F_RDLCK, F_WRLCK, F_UNLCK ¤Î¤¤¤º¤ì¤«¤¬ÊÖ¤µ¤ì¤ë¡£ F_RDLCK, F_WRLCK ¤Ï¤½¤ì¤¾¤ì¡¢¸Æ¤Ó½Ð¤·¸µ¥×¥í¥»¥¹¤¬Æɤ߽Ф·¥ê¡¼¥¹¡¢½ñ¤¹þ¤ß¥ê¡¼¥¹¤ò ÊÝ»ý¤·¤Æ¤¤¤ë¤³¤È¤ò¼¨¤·¡¢ F_UNLCK ¤Ï¥ê¡¼¥¹¤ò²¿¤âÊÝ»ý¤·¤Æ¤¤¤Ê¤¤¤³¤È¤ò¼¨¤¹¡£ (fcntl() ¤ÎÂè3°ú¤¿ô¤Ï¾Êά¤µ¤ì¤ë¡£)
¤¢¤ë¥×¥í¥»¥¹ ("lease folder") ¤¬ F_SETLEASE ¤ÇÀßÄꤵ¤ì¤¿¥ê¡¼¥¹¤ÈÌ·½â¤¹¤ë¤è¤¦¤Ê open(2) ¤ä truncate(2) ¤ò¼Â¹Ô¤·¤¿¾ì¹ç¡¢ ¤½¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï¥«¡¼¥Í¥ë¤Ë¤è¤Ã¤ÆÄä»ß¤µ¤ì¡¢ ¥«¡¼¥Í¥ë¤Ï lease holder ¤Ë¥·¥°¥Ê¥ë (¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï SIGIO) ¤òÁ÷¤Ã¤Æ ÄÌÃΤò¹Ô¤¦¡£ lease holder ¤Ï¤³¤Î¥·¥°¥Ê¥ë¤ò¼õ¿®¤·¤¿¤È¤¤Ë¤Ï¤¤Á¤ó¤ÈÂбþ¤¹¤Ù¤¤Ç¤¢¤ë¡£ ¶ñÂÎŪ¤Ë¤Ï¡¢ÊÌ¤Î¥×¥í¥»¥¹¤¬¤½¤Î¥Õ¥¡¥¤¥ë¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤¿¤á¤Î½àÈ÷¤È¤·¤Æ ɬÍפʸåÊÒÉÕ¤± (Î㤨¤Ð¡¢¥¥ã¥Ã¥·¥å¤µ¤ì¤¿¥Ð¥Ã¥Õ¥¡¤Î¥Õ¥é¥Ã¥·¥å) ¤ò ¤¹¤Ù¤Æ¹Ô¤Ã¤Æ¤«¤é¡¢¤½¤Î¥Õ¥¡¥¤¥ë¤Î¥ê¡¼¥¹¤Îºï½ü¤Þ¤¿¤Ï³Ê²¼¤²¤ò¹Ô¤¦¡£ ¥ê¡¼¥¹¤òºï½ü¤ò¤¹¤ë¤Ë¤Ï¡¢ arg ¤Ë F_UNLCK ¤ò»ØÄꤷ¤Æ F_SETLEASE ¤ò¼Â¹Ô¤¹¤ë¡£ ¥Õ¥¡¥¤¥ë¤Ë½ñ¤¹þ¤ß¥ê¡¼¥¹¤òÊÝ»ý¤ò¤·¤Æ¤¤¤Æ¡¢ lease breaker ¤¬Æɤ߽Ф·ÍѤˤ½¤Î¥Õ¥¡¥¤¥ë¤ò¥ª¡¼¥×¥ó¤·¤è¤¦¤È¤·¤Æ¤¤¤ë¾ì¹ç¡¢ ŬÍѤ¹¤ë¥ê¡¼¥¹¤òÆɤ߽Ф·¥ê¡¼¥¹¤Ë³Ê²¼¤²¤¹¤ì¤Ð½½Ê¬¤Ç¤¢¤ë¡£ ¤³¤ì¤ò¤¹¤ë¤Ë¤Ï¡¢ arg ¤Ë F_RDLCK ¤ò»ØÄꤷ¤Æ F_SETLEASE ¤ò¼Â¹Ô¤¹¤ë¡£
lease holder ¤¬ /proc/sys/fs/lease-break-time ¤Ç»ØÄꤵ¤ì¤¿Éÿô°ÊÆâ¤Ë¥ê¡¼¥¹¤Î³Ê²¼¤²¤«ºï½ü¤ò¹Ô¤¨¤Ê¤«¤Ã¤¿¾ì¹ç¡¢ ¥«¡¼¥Í¥ë¤Ï¶¯À©Åª¤Ë¤½¤Î lease holder ¤Î¥ê¡¼¥¹¤òºï½ü¤â¤·¤¯¤Ï³Ê²¼¤²¤ò¹Ô¤¦¡£
°ìÅ٥꡼¥¹¤Îºï½ü¤«³Ê²¼¤²¤¬¼«È¯Åª¤â¤·¤¯¤Ï¶¯À©Åª¤Ë¹Ô¤ï¤ì¤ë¤È¡¢ lease breaker ¤¬¤Þ¤À¥·¥¹¥Æ¥à¥³¡¼¥ë¤òºÆ³«¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢ ¥«¡¼¥Í¥ë¤¬ lease breaker ¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤Î³¹Ô¤òµö²Ä¤¹¤ë¡£
lease breaker ¤¬¼Â¹Ô¤·¤¿ open(2) ¤ä truncate(2) ¤¬Ää»ßÃæ¤Ë¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤Ë¤è¤êÃæÃǤµ¤ì¤¿¾ì¹ç¡¢ ¤½¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï EINTR ¥¨¥é¡¼¤Ç¼ºÇÔ¤¹¤ë¤¬¡¢¾å¤Ç½Ò¤Ù¤¿Â¾¤Î½èÍý¤Ï ¤½¤Î¤Þ¤Þ¹Ô¤ï¤ì¤ë¡£ open(2) ¤ä truncate(2) ¤¬Ää»ßÃæ¤Ë lease breaker ¤¬¥·¥°¥Ê¥ë¤Ë¤è¤ê kill ¤µ¤ì¤¿¾ì¹ç¡¢ ¾å¤Ç½Ò¤Ù¤¿Â¾¤Î½èÍý¤Ï¤½¤Î¤Þ¤Þ¹Ô¤ï¤ì¤ë¡£ lease breaker ¤¬ open(2) ¤ò¸Æ¤ÖºÝ¤Ë O_NONBLOCK ¥Õ¥é¥°¤ò»ØÄꤷ¤¿¾ì¹ç¡¢¤½¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï EWOULDBLOCK ¥¨¥é¡¼¤Çľ¤Á¤Ë¼ºÇÔ¤¹¤ë¤¬¡¢¾å¤Ç½Ò¤Ù¤¿Â¾¤Î½èÍý¤Ï¤½¤Î¤Þ¤Þ¹Ô¤ï¤ì¤ë¡£
lease holder ¤Ø¤ÎÄÌÃΤ˻Ȥï¤ì¤ë¥Ç¥Õ¥©¥ë¥È¤Î¥·¥°¥Ê¥ë¤Ï SIGIO ¤À¤¬¡¢ fcntl() ¤Î F_SETSIG ¥³¥Þ¥ó¥É¤ÇÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£ F_SETSIG ¥³¥Þ¥ó¥É¤¬¼Â¹Ô¤µ¤ì (SIGIO ¤ò»ØÄꤵ¤ì¤¿¾ì¹ç¤â´Þ¤à)¡¢ SA_SIGINFO ¥Õ¥é¥°ÉÕ¤¤Ç¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢ ¥Ï¥ó¥É¥é¤ÎÂèÆó°ú¤¿ô¤È¤·¤Æ siginfo_t ¹½Â¤ÂΤ¬ÅϤµ¤ì¡¢¤³¤Î°ú¤¿ô¤Î si_fd ¥Õ¥£¡¼¥ë¥É¤Ë¤ÏÊÌ¤Î¥×¥í¥»¥¹¤¬¥¢¥¯¥»¥¹¤·¤¿¥ê¡¼¥¹ÀßÄêºÑ¤ß¥Õ¥¡¥¤¥ë¤Î ¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬Æþ¤Ã¤Æ¤¤¤ë (¤³¤Îµ¡Ç½¤ÏÊ£¿ô¤Î¥Õ¥¡¥¤¥ë¤ËÂФ·¤Æ¥ê¡¼¥¹¤òÀßÄꤹ¤ë¾ì¹ç¤ËÍÍѤǤ¢¤ë)¡£
¥Õ¥¡¥¤¥ë¤ä¥Ç¥£¥ì¥¯¥È¥ê¤ÎÊѹ¹¤ÎÄÌÃÎ (dnotify)
- F_NOTIFY
- (Linux 2.4 °Ê¹ß) fd ¤Ç»²¾È¤µ¤ì¤ë¥Ç¥£¥ì¥¯¥È¥ê¤«¡¢¤½¤ÎÃæ¤Ë¤¢¤ë¥Õ¥¡¥¤¥ë¤ËÊѹ¹¤¬¤¢¤Ã¤¿¾ì¹ç¤Ë ÄÌÃΤò¹Ô¤¦¡£¤É¤Î¥¤¥Ù¥ó¥È¤òÄÌÃΤ¹¤ë¤«¤Ï arg ¤Ç»ØÄꤹ¤ë¡£ arg ¤Ï¥Ó¥Ã¥È¥Þ¥¹¥¯¤Ç¡¢°Ê²¼¤Î¥Ó¥Ã¥È¤Î 0¸Ä°Ê¾å¤ÎÏÀÍýϤò¤È¤Ã¤¿¤â¤Î¤ò»ØÄꤹ¤ë¡£
¥Ó¥Ã¥È ÀâÌÀ (¥Ç¥£¥ì¥¯¥È¥ê¤Î¥¤¥Ù¥ó¥È) DN_ACCESS DN_MODIFY ¥Õ¥¡¥¤¥ë¤ÎÆâÍƤ¬Êѹ¹¤µ¤ì¤¿ (write, pwrite, writev, truncate, ftruncate) DN_CREATE ¥Õ¥¡¥¤¥ë¤¬ºîÀ®¤µ¤ì¤¿ (open, creat, mknod, mkdir, link, symlink, rename) DN_DELETE ¥Õ¥¡¥¤¥ë¤¬ºï½ü (unlink) ¤µ¤ì¤¿ (unlink, Ê̤Υǥ£¥ì¥¯¥È¥ê¤Ø¤Î rename, rmdir) DN_RENAME ¥Ç¥£¥ì¥¯¥È¥êÆâ¤Ç¤Î¥Õ¥¡¥¤¥ë̾¤ÎÊѹ¹¤¬¤¢¤Ã¤¿ (rename) DN_ATTRIB ¥Õ¥¡¥¤¥ë°À¤¬Êѹ¹¤µ¤ì¤¿ (chown, chmod, utime[s]) (¾åµ¤ÎÄêµÁ¤òÍøÍѤ¹¤ë¤Ë¤Ï _GNU_SOURCE µ¡Ç½¸¡ºº¥Þ¥¯¥í¤ò ÄêµÁ¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£)
¥Ç¥£¥ì¥¯¥È¥ê¤ÎÊѹ¹ÄÌÃΤÏÄ̾ï¡Ö°ì²ó¸Â¤ê (one-shot)¡×¤Ç¤¢¤ê¡¢ ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¦¤Ç¤½¤Î¸å¤µ¤é¤ËÄÌÃΤò¼õ¿®¤·¤¿¤¤¾ì¹ç¤Ï ºÆÅÐÏ¿¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ arg ¤Ë DN_MULTISHOT ¤¬´Þ¤Þ¤ì¤Æ¤¤¤¿¾ì¹ç¤Ë¤Ï¡¢ Êѹ¹ÄÌÃΤÏÌÀ¼¨Åª¤Ë²ò½ü¤µ¤ì¤ë¤Þ¤Ç͸ú¾õÂÖ¤¬·Ñ³¤¹¤ë¡£
F_NOTIFY Í×µá¤ÏÀÑ»»¤µ¤ì¤Æ¤¤¤¯¡£¤Ä¤Þ¤ê¡¢ arg ¤Ç»ØÄꤵ¤ì¤¿¥¤¥Ù¥ó¥È¤¬¤¹¤Ç¤Ë¥â¥Ë¥¿¤µ¤ì¤Æ¤¤¤ë ¥¤¥Ù¥ó¥È½¸¹ç¤Ë²Ã»»¤µ¤ì¤ë·Á¤Ë¤Ê¤ë¡£ ¤¹¤Ù¤Æ¤Î¥¤¥Ù¥ó¥È¤ÎÄÌÃΤò̵¸ú¤Ë¤¹¤ë¤Ë¤Ï¡¢ arg ¤Ë 0 ¤ò»ØÄꤷ¤Æ F_NOTIFY ¤ò¸Æ¤Ó½Ð¤¹É¬Íפ¬¤¢¤ë¡£
ÄÌÃΤϥ·¥°¥Ê¥ë¤ÎÇÛÁ÷¤Ç¹Ô¤ï¤ì¤ë¡£ ¥Ç¥Õ¥©¥ë¥È¤Î¥·¥°¥Ê¥ë¤Ï SIGIO ¤À¤¬¡¢ fcntl() ¤Î F_SETSIG ¥³¥Þ¥ó¥É¤ÇÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£ ¸å¼Ô¤Î¾ì¹ç¤Ë¤Ï¡¢(SA_SIGINFO ¥Õ¥é¥°ÉÕ¤¤Ç¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤¬ÀßÄꤵ¤ì¤Æ ¤¤¤ë¾ì¹ç¤Ë¤Ï) ¥Ï¥ó¥É¥é¤ÎÂèÆó°ú¤¿ô¤È¤·¤Æ siginfo_t ¹½Â¤ÂΤ¬ÅϤµ¤ì¡¢¤³¤Î¹½Â¤ÂΤΠsi_fd ¥Õ¥£¡¼¥ë¥É¤Ë¤ÏÄÌÃΤιԤï¤ì¤¿¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬Æþ¤Ã¤Æ¤¤¤ë (¤³¤Îµ¡Ç½¤ÏÊ£¿ô¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ËÂФ·¤ÆÄÌÃΤòÀßÄꤹ¤ë¾ì¹ç¤ËÍÍѤǤ¢¤ë)¡£
ÆÃ¤Ë DN_MULTISHOT ¤ò»È¤¦¾ì¹ç¤Ï¡¢ÄÌÃΤˤϥꥢ¥ë¥¿¥¤¥à¥·¥°¥Ê¥ë¤ò»È¤¦¤Ù¤¤Ç¤¢¤ë¡£ ¤½¤ì¤Ï¡¢¥ê¥¢¥ë¥¿¥¤¥à¥·¥°¥Ê¥ë¤ò»È¤¦¤³¤È¤Ç¡¢Ê£¿ô¤ÎÄÌÃΤò¥¥å¡¼¤ËÆþ¤ì¤ë ¤³¤È¤¬¤Ç¤¤ë¤«¤é¤Ç¤¢¤ë¡£
Ãí°Õ: ¿·¤·¤¯¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ò½ñ¤¯ºÝ¤Ë¤Ï¡¢(¥«¡¼¥Í¥ë 2.6.13 °Ê¹ß¤ÇÍøÍѲÄǽ¤È¤Ê¤Ã¤¿) inotify ¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò»ÈÍѤ¹¤ë¤³¤È¤ò¸¡Æ¤¤¹¤Ù¤¤Ç¤¢¤ë¡£ inotify ¤Ï¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¥¤¥Ù¥ó¥È¤ÎÄÌÃΤò¼èÆÀ¤¹¤ë¤¿¤á¤Î¾å°Ì¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤Ç¤¢¤ë¡£ inotify(7) ¤ò»²¾È¡£
ÊÖ¤êÃÍ
À®¸ù¤·¤¿¾ì¹ç¤ÎÊÖ¤êÃͤÏÁàºî¤Î¼ïÎà¤Ë¤è¤ê°ã¤¦:- F_DUPFD
- ¿·¤·¤¤¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÊÖ¤¹¡£
- F_GETFD
- ¥Õ¥é¥°¤ÎÃͤòÊÖ¤¹¡£
- F_GETFL
- ¥Õ¥é¥°¤ÎÃͤòÊÖ¤¹¡£
- F_GETOWN
- ¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Î½êͼԤòÊÖ¤¹¡£
- F_GETSIG
- Æɤ߹þ¤ß¤ä½ñ¤½Ð¤·¤¬²Äǽ¤Ë¤Ê¤Ã¤¿»þ¤ËÁ÷¤é¤ì¤ë¥·¥°¥Ê¥ë¤ÎÃÍ¡¢¤â¤·¤¯¤Ï ÅÁÅýŪ¤Ê SIGIO Æ°ºî¤Î¾ì¹ç¤Ë¤Ï¥¼¥í¤òÊÖ¤¹¡£
- ¾¤ÎÁ´¤Æ¤Î¥³¥Þ¥ó¥É¤Ï 0 ¤òÊÖ¤¹¡£
¥¨¥é¡¼¤Î»þ¤Ï -1 ¤¬ÊÖ¤µ¤ì¡¢ errno ¤ËŬÀÚ¤ÊÃͤ¬ÀßÄꤵ¤ì¤ë¡£
¥¨¥é¡¼
- EACCES ¤« EAGAIN
- ¾¤Î¥×¥í¥»¥¹¤¬ÊÝ»ý¤·¤Æ¤¤¤ë¥í¥Ã¥¯¤Ë¤è¤Ã¤ÆÁàºî¤¬¶Ø»ß¤µ¤ì¤Æ¤¤¤ë¡£
- EAGAIN
- ¤½¤Î¥Õ¥¡¥¤¥ë¤Ï¾¤Î¥×¥í¥»¥¹¤Ë¤è¤Ã¤Æ¥á¥â¥ê¡¦¥Þ¥Ã¥×¤µ¤ì¤Æ¤¤¤ë¤¿¤á¡¢ Áàºî¤¬¶Ø»ß¤µ¤ì¤Æ¤¤¤ë¡£
- EBADF
- fd ¤¬¥ª¡¼¥×¥ó¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ç¤Ê¤¤¡£ ¤¢¤ë¤¤¤Ï¥³¥Þ¥ó¥É¤¬ F_SETLK ¤Þ¤¿¤Ï F_SETLKW ¤À¤Ã¤¿¤¬¡¢ÂоݤΥե¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Î¥ª¡¼¥×¥ó¥â¡¼¥É¤¬ ɬÍפȤʤë¥í¥Ã¥¯¤Î·¿¤Ë¥Þ¥Ã¥Á¤·¤Æ¤¤¤Ê¤¤¡£
- EDEADLK
- »ØÄꤵ¤ì¤¿ F_SETLKW ¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤¿¾ì¹ç¤Ë¤Ï¥Ç¥Ã¥É¥í¥Ã¥¯¤Ë¤Ê¤ë¤³¤È¤¬¸¡½Ð¤µ¤ì¤¿¡£
- EFAULT
- lock ¤¬ÍøÍѲÄǽ¤Ê¥¢¥É¥ì¥¹¶õ´Ö¤Î³°Éô¤Ë¤¢¤ë¡£
- EINTR
- F_SETLKW ¥³¥Þ¥ó¥É¤¬¥·¥°¥Ê¥ë¤Ë¤è¤ê³ä¤ê¹þ¤Þ¤ì¤¿¡£ F_GETLK ¤È F_SETLK ¤Î¾ì¹ç¡¢¥í¥Ã¥¯¤ò³Îǧ¤·¤¿¤ê¼èÆÀ¤·¤¿¤ê¤¹¤ëÁ°¤Ë¥·¥°¥Ê¥ë¤Ë¤è¤Ã¤Æ³ä¤ê¹þ¤Þ¤ì¤¿¡£ ¤³¤ì¤Ï¤¿¤¤¤Æ¤¤¥ê¥â¡¼¥È¤Î¥Õ¥¡¥¤¥ë¤ò¥í¥Ã¥¯¤¹¤ë¾ì¹ç (Î㤨¤Ð NFS ¾å¤Ç¥í¥Ã¥¯¤¹¤ë¾ì¹ç) ¤Ëµ¯¤³¤ë¡£ ¤·¤«¤·¥í¡¼¥«¥ë¤Ç¤âµ¯¤³¤ë¾ì¹ç¤¬¤¢¤ë¡£
- EINVAL
- F_DUPFD¤Ç¡¢ arg ¤¬É餫¡¢¤â¤·¤¯¤Ïµö¤µ¤ì¤ëºÇÂçÃͤè¤ê¤âÂ礤¤¡£ F_SETSIG ¤Î¾ì¹ç¡¢ arg ¤¬ÍøÍѲÄǽ¤Ê¥·¥°¥Ê¥ëÈÖ¹æ¤Ç¤Ï¤Ê¤¤¡£
- EMFILE
- F_DUPFD¤Ç¡¢ ¥×¥í¥»¥¹¤¬¤¹¤Ç¤ËºÇÂç¿ô¤Þ¤Ç¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ò¥ª¡¼¥×¥ó¤·¤Æ¤¤¤ë¡£
- ENOLCK
- ¥ª¡¼¥×¥ó¤µ¤ì¤Æ¤¤¤ë¥í¥Ã¥¯¤Î¿ô¤¬Â¿²á¤®¤Æ¡¢¥í¥Ã¥¯¡¦¥Æ¡¼¥Ö¥ë¤¬¤¤¤Ã¤Ñ¤¤¤Ç¤¢¤ë¡£ ¤Þ¤¿¤Ï remote locking protocol (Î㤨¤Ð NFS ¾å¤Î¥í¥Ã¥¯) ¤¬¼ºÇÔ¤·¤¿¡£
- EPERM
- ÄɲÃÀìÍÑ°À¤¬ÀßÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë¤Î O_APPEND ¥Õ¥é¥°¤ò¥¯¥ê¥¢¤·¤è¤¦¤È»î¤ß¤¿¡£
½àµò
SVr4, 4.3BSD, POSIX.1-2001. POSIX.1-2001 ¤Çµ¬Äꤵ¤ì¤Æ¤¤¤ëÁàºî¤Ï¡¢ F_DUPFD, F_GETFD, F_SETFD, F_GETFL, F_SETFL, F_GETLK, F_SETLK, F_SETLKW, F_GETOWN, F_SETOWN ¤À¤±¤Ç¤¢¤ë¡£F_GETSIG, F_SETSIG, F_NOTIFY, F_GETLEASE, F_SETLEASE ¤Ï Linux ¸ÇͤǤ¢¤ë (¤³¤ì¤é¤ÎÄêµÁ¤ò͸ú¤Ë¤¹¤ë¤Ë¤Ï _GNU_SOURCE ¥Þ¥¯¥í¤òÄêµÁ¤¹¤ë¤³¤È)¡£
Ãí°Õ
¥¨¥é¡¼¤ÎºÝ¤ÎÊÖ¤êÃͤ¬ dup2(2) ¤È F_DUPFD ¤Ç¤Ï°Û¤Ê¤Ã¤Æ¤¤¤ë¡£¥«¡¼¥Í¥ë 2.0 °Ê¹ß¤Ç¤Ï¡¢ flock(2) ¤È fcntl(2) ¤¬ÀßÄꤹ¤ë¥í¥Ã¥¯¼ïÊ̤δ֤ËÁê¸ßºîÍѤϤʤ¤¡£
POSIX.1-2001 ¤Ç¤Ï l_len ¤òÉé¤ÎÃͤˤ¹¤ë¤³¤È¤¬¤Ç¤¤ë (¤³¤Î¾ì¹ç¡¢¥í¥Ã¥¯¤µ¤ì¤ë¥Ð¥¤¥È°ÌÃÖ¤Ï l_start+l_len °Ê¾å l_start-1 °Ê²¼¤È¤Ê¤ë)¡£ ¤³¤ÎÆ°ºî¤Ï Linux 2.4.21 ¤ª¤è¤Ó 2.5.49 °Ê¹ß¤Ç¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¡£
¥·¥¹¥Æ¥à¤Ë¤è¤Ã¤Æ¤Ï¡¢ struct flock ¤Ë¾åµ°Ê³°¤Î¥Õ¥£¡¼¥ë¥É¤¬¤¢¤ë¤â¤Î¤â¤¢¤ë (Î㤨¤Ð l_sysid)¡£ ¤Ï¤Ã¤¤ê¤È¸À¤¨¤ë¤³¤È¤Ï¡¢¥í¥Ã¥¯¤òÊÝ»ý¤·¤Æ¤¤¤ë¥×¥í¥»¥¹¤¬Ê̤Υޥ·¥ó¤Ë¸ºß ¤¹¤ë¾ì¹ç¤Ë¤Ï¡¢ l_pid ¤À¤±¤Ï¤¢¤Þ¤êÌò¤Ë¤¿¤¿¤Ê¤¤¤À¤í¤¦¤È¤¤¤¦¤³¤È¤Ç¤¢¤ë¡£
¥Ð¥°
¤¤¤¯¤Ä¤«¤Î¥¢¡¼¥¥Æ¥¯¥Á¥ã (ÆÃ¤Ë x86) ¤Ë¤ª¤±¤ë Linux ¥·¥¹¥Æ¥à¥³¡¼¥ë¤Î´·½¬ ¤Î¤¿¤á°Ê²¼¤ÎÀ©¸Â¤¬Â¸ºß¤¹¤ë¡£ F_GETOWN ¤¬ÊÖ¤¹ (Éé¤Î) ¥×¥í¥»¥¹¥°¥ë¡¼¥×ID ¤¬ -1 ¤«¤é -4095 ¤ÎÈϰϤËÆþ¤Ã¤¿¾ì¹ç¡¢ glibc ¤Ï¤³¤ÎÊÖ¤êÃͤò¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ç¥¨¥é¡¼¤¬µ¯¤³¤Ã¤¿¤È ´Ö°ã¤Ã¤Æ²ò¼á¤·¤Æ¤·¤Þ¤¦¡£¤Ä¤Þ¤ê¡¢ fcntl() ¤ÎÊÖ¤êÃÍ¤Ï -1 ¤È¤Ê¤ê¡¢ errno ¤Ë¤Ï (Àµ¤Î) ¥×¥í¥»¥¹¥°¥ë¡¼¥×ID ¤¬ÀßÄꤵ¤ì¤ë¤³¤È¤Ë¤Ê¤ë¡£Linux 2.4 °ÊÁ°¤Ç¤Ï¡¢ÈóÆø¢¥×¥í¥»¥¹¤¬ F_SETOWN ¤ò»È¤Ã¤Æ¡¢¥½¥±¥Ã¥È¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Î½êÍ¼Ô¤Ë ¸Æ¤Ó½Ð¤·¸µ°Ê³°¤Î¥×¥í¥»¥¹ (¤ä¥×¥í¥»¥¹¥°¥ë¡¼¥×) ¤ò»ØÄꤹ¤ë¤È ȯÀ¸¤¹¤ë¥Ð¥°¤¬¤¢¤ë¡£¤³¤Î¾ì¹ç¡¢ ¸Æ¤Ó½Ð¤·¸µ¤¬½êͼԤȤ·¤Æ»ØÄꤷ¤¿¥×¥í¥»¥¹ (¤ä¥×¥í¥»¥¹¥°¥ë¡¼¥×) ¤Ë ¥·¥°¥Ê¥ë¤òÁ÷¤ëµö²Ä¤ò»ý¤Ã¤Æ¤¤¤¿¤È¤·¤Æ¤â¡¢ fcntl() ¤¬ -1 ¤òÊÖ¤· errno ¤Ë EPERM ¤òÀßÄꤹ¤ë¤³¤È¤¬¤¢¤ë¡£ ¤³¤Î¥¨¥é¡¼¤¬Ê֤俤ˤ⤫¤«¤ï¤é¤º¡¢¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Î½êÍ¼Ô ¤ÏÀßÄꤵ¤ì¡¢¥·¥°¥Ê¥ë¤Ï¤½¤Î½êͼԤËÁ÷¤é¤ì¤ë¡£
´ØÏ¢¹àÌÜ
dup2(2), flock(2), open(2), socket(2), lockf(3), capabilities(7), feature_test_macros(7) ¥«¡¼¥Í¥ë¥½¡¼¥¹Æâ¤Î Documentation/locks.txt, Documentation/mandatory.txt, Documentation/dnotify.txt ¤â»²¾È¤Î¤³¤È¡£Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre