openat

Autres langues

Langue: ja

Autres versions - même langue

Version: 2006-03-06 (openSuse - 09/10/07)

Section: 2 (Appels système)

̾Á°

openat - ¥Ç¥£¥ì¥¯¥È¥ê¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤«¤éÁêÂÐŪ¤Ê°ÌÃ֤ˤ¢¤ë¥Õ¥¡¥¤¥ë¤ò¥ª¡¼¥×¥ó¤¹¤ë

½ñ¼°


#define _ATFILE_SOURCE

#include <fcntl.h>



int openat(int dirfd, const char *pathname, int flags);

int openat(int dirfd, const char *pathname, int flags, mode_t mode);

ÀâÌÀ

openat() ¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï¡¢¤³¤Î man ¥Ú¡¼¥¸¤ÇÀâÌÀ¤·¤Æ¤¤¤ë°ã¤¤¤¬¤¢¤ë°Ê³°¤Ï¡¢ open(2) ¤ÈÁ´¤¯Æ±¤¸¤è¤¦¤ËÆ°ºî¤¹¤ë¡£

pathname ¤Ç»ØÄꤵ¤ì¤ë¥Ñ¥¹Ì¾¤¬ÁêÂХѥ¹¤Ç¤¢¤ë¾ì¹ç¡¢ ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿ dirfd ¤Ç»²¾È¤µ¤ì¤ë¥Ç¥£¥ì¥¯¥È¥ê¤«¤é¤ÎÁêÂХѥ¹Ì¾¤È¤·¤Æ²ò¼á¤µ¤ì¤ë (open(2) ¤Ç¤Ï¡¢ÁêÂХѥ¹¤Ï¸Æ¤Ó½Ð¤·¸µ¥×¥í¥»¥¹¤Î¥«¥ì¥ó¥È¥ï¡¼¥­¥ó¥°¥Ç¥£¥ì¥¯¥È¥ê¤«¤é¤Î ÁêÂХѥ¹¤È¤Ê¤ë)¡£

pathname ¤¬ÁêÂХѥ¹¤Ç¤¢¤ê¡¢¤«¤Ä dirfd ¤¬ÆÃÊ̤ÊÃÍ AT_FDCWD ¤Ç¤¢¤ë¾ì¹ç¡¢ pathname ¤Ï (open(2) ¤ÈƱ¤¸¤è¤¦¤Ë) ¸Æ¤Ó½Ð¤·¸µ¥×¥í¥»¥¹¤Î ¥«¥ì¥ó¥È¥ï¡¼¥­¥ó¥°¥Ç¥£¥ì¥¯¥È¥ê¤«¤é¤ÎÁêÂХѥ¹Ì¾¤È¤·¤Æ²ò¼á¤µ¤ì¤ë¡£

pathname ¤¬ÀäÂХѥ¹¤Ç¤¢¤ë¾ì¹ç¡¢ dirfd ¤Ï̵»ë¤µ¤ì¤ë¡£

ÊÖ¤êÃÍ

À®¸ù¤·¤¿¾ì¹ç¡¢ openat() ¤Ï¿·¤·¤¤¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÊÖ¤¹¡£ ¥¨¥é¡¼¤Î¾ì¹ç¡¢-1 ¤¬ÊÖ¤µ¤ì¤Æ¡¢ errno ¤Ë¤Ï¥¨¥é¡¼¤ò¼¨¤¹Ãͤ¬ÀßÄꤵ¤ì¤ë¡£

¥¨¥é¡¼

open(2) ¤ÈƱ¤¸¥¨¥é¡¼¤¬ openat() ¤Ç¤âµ¯¤³¤ë¡£ openat() ¤Ç¤Ï¡¢¤½¤Î¾¤Ë°Ê²¼¤Î¥¨¥é¡¼¤¬µ¯¤³¤ë:
EBADF
dirfd ¤¬Í­¸ú¤Ê¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ç¤Ê¤¤¡£
ENOTDIR
pathname ¤¬ÁêÂХѥ¹¤Ç¡¢¤«¤Ä dirfd ¤¬¥Ç¥£¥ì¥¯¥È¥ê°Ê³°¤Î¥Õ¥¡¥¤¥ë¤ò»²¾È¤¹¤ë¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ç¤¢¤ë¡£

¥Ð¡¼¥¸¥ç¥ó

openat() ¤Ï Linux ¥«¡¼¥Í¥ë 2.6.16 ¤ÇÄɲ䵤줿¡£

½àµò

¤³¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ïɸ½àŪ¤Ç¤Ï¤Ê¤¤¤¬¡¢ POSIX.1 ¤Î¾­Íè¤Î¥ê¥Ó¥¸¥ç¥ó¤Ë´Þ¤á¤ë¤³¤È¤¬Äó°Æ¤µ¤ì¤Æ¤¤¤ë¡£ Solaris ¤Ë¤Ï¡¢¤³¤ì¤ÈƱ¤¸¤è¤¦¤Ê¥·¥¹¥Æ¥à¥³¡¼¥ë¤¬Â¸ºß¤¹¤ë¡£

Ãí°Õ

openat() ¤ä "at" ¤¬¸å¤í¤ËÉÕ¤¤¤¿¤½¤Î¾¤ÎƱÍͤΥ·¥¹¥Æ¥à¥³¡¼¥ë¤Ï¡¢ 2 ¤Ä¤ÎÍýͳ¤Ë¤è¤êÄ󶡤µ¤ì¤Æ¤¤¤ë¡£

1 ¤ÄÌܤÎÍýͳ¤Ï¡¢ ¥«¥ì¥ó¥È¥ï¡¼¥­¥ó¥°¥Ç¥£¥ì¥¯¥È¥ê°Ê³°¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤¢¤ë¥Õ¥¡¥¤¥ë·²¤ò open(2) ¤Ç¥ª¡¼¥×¥ó¤¹¤ë¤È¤­¤Ëµ¯¤³¤ë²ÄǽÀ­¤¬¤¢¤ë¶¥¹ç¾õÂÖ (race condition) ¤ò¡¢ openat() ¤Ë¤è¤Ã¤Æ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤¬²óÈò¤Ç¤­¤ë¤¿¤á¤Ç¤¢¤ë¡£ ¤³¤ì¤é¤Î¶¥¹ç¾õÂ֤ϡ¢ open(2) ¤Ë»ØÄꤵ¤ì¤¿¥Ñ¥¹¤Î¥Ç¥£¥ì¥¯¥È¥êÉôʬ¤Î (/ ¤Ç¶èÀÚ¤é¤ì¤¿) ¤¤¤¯¤Ä¤«¤Î¹½À®Í×ÁÇ (¤ò¥ª¡¼¥×¥ó¤¹¤ë½èÍý) ¤¬¡¢ open(2) ¤òÊÂÎó¤Ë¸Æ¤Ó½Ð¤¹½èÍý¤ËÊÑ´¹¤µ¤ì¤¿¾ì¹ç¤Ëµ¯¤³¤ë¡£ ¤³¤Î¤è¤¦¤Ê¶¥¹ç¤Ï¡¢Âоݥǥ£¥ì¥¯¥È¥ê¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ò¥ª¡¼¥×¥ó¤·¡¢ ¤½¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ò openat() ¤Î dirfd °ú¤­¿ô¤Ë»ØÄꤹ¤ë¤³¤È¤Ç²óÈò¤Ç¤­¤ë¡£

2 ¤ÄÌܤÎÍýͳ¤Ï¡¢ ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ë¤è¤Ã¤Æ´ÉÍý¤µ¤ì¤ë¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿ (·²) ¤ò»È¤¦¤³¤È¤Ç¡¢ openat() ¤¬¥¹¥ì¥Ã¥ÉËè¤Î¤¤¤ï¤æ¤ë¡Ö¥«¥ì¥ó¥È¥ï¡¼¥­¥ó¥°¥Ç¥£¥ì¥¯¥È¥ê¡×¤ò¼ÂÁõ¤Ç¤­¤ë¤¿¤á¤Ç¤¢¤ë¡£ (¤³¤Îµ¡Ç½¤Ï /proc/self/fd/dirfd ¤ò»È¤Ã¤¿Î¢µ»¤Ç¤â¼Â¸½¤Ç¤­¤ë¤¬¡¢¤¢¤Þ¤ê¸úΨŪ¤Ç¤Ï¤Ê¤¤)¡£

´ØÏ¢¹àÌÜ

faccessat(2), fchmodat(2), fchownat(2), fstatat(2), futimesat(2), linkat(2), mkdirat(2), mknodat(2), open(2), readlinkat(2), renameat(2), symlinkat(2), unlinkat(2), mkfifoat(3), path_resolution(7)