X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=release%2Fman2%2Fopenat.2;h=0ef65c3619b722ca10306e4f6d14365c10e7f098;hb=c1dfa2f6ab1bbed84992d3c59ee9925f4d453668;hp=ee0915aec64ce92d5f51f1fd898c5f087203807c;hpb=633a2252e0be3c867dce264a180a89ce8181d36f;p=linuxjm%2FLDP_man-pages.git diff --git a/release/man2/openat.2 b/release/man2/openat.2 index ee0915ae..0ef65c36 100644 --- a/release/man2/openat.2 +++ b/release/man2/openat.2 @@ -1,7 +1,6 @@ -.\" Hey Emacs! This file is -*- nroff -*- source. -.\" .\" This manpage is Copyright (C) 2006, Michael Kerrisk .\" +.\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. @@ -21,96 +20,67 @@ .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. +.\" %%%LICENSE_END +.\" +.\"******************************************************************* .\" -.\" Japanese Version Copyright (c) 2006 Yuichi SATO -.\" all rights reserved. -.\" Translated 2006-09-27 by Yuichi SATO , LDP v2.39 +.\" This file was generated with po4a. Translate the source file. .\" -.TH OPENAT 2 2009-12-13 "Linux" "Linux Programmer's Manual" -.SH ̾Á° -openat \- ¥Ç¥£¥ì¥¯¥È¥ê¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤«¤éÁêÂÐŪ¤Ê°ÌÃ֤ˤ¢¤ë¥Õ¥¡¥¤¥ë¤ò¥ª¡¼¥×¥ó¤¹¤ë -.SH ½ñ¼° +.\"******************************************************************* +.TH OPENAT 2 2012\-05\-04 Linux "Linux Programmer's Manual" +.SH 名前 +openat \- ディレクトリファイルディスクリプタから相対的な位置にあるファイルをオープンする +.SH 書式 .nf -.B #include +\fB#include \fP .sp -.BI "int openat(int " dirfd ", const char *" pathname ", int " flags ); -.BI "int openat(int " dirfd ", const char *" pathname ", int " flags \ -", mode_t " mode ); +\fBint openat(int \fP\fIdirfd\fP\fB, const char *\fP\fIpathname\fP\fB, int \fP\fIflags\fP\fB);\fP +\fBint openat(int \fP\fIdirfd\fP\fB, const char *\fP\fIpathname\fP\fB, int \fP\fIflags\fP\fB, mode_t \fP\fImode\fP\fB);\fP .fi .sp .in -4n -glibc ¸þ¤±¤Îµ¡Ç½¸¡ºº¥Þ¥¯¥í¤ÎÍ×·ï -.RB ( feature_test_macros (7) -»²¾È): +glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7) 参照): .in .sp -.BR openat (): -.br -glibc 2.10 °Ê¹ß: _XOPEN_SOURCE >= 700 || _POSIX_C_SOURCE >= 200809L -.br -glibc 2.10 ¤è¤êÁ°: +\fBopenat\fP(): +.PD 0 +.ad l +.RS 4 +.TP 4 +glibc 2.10 以降: +_XOPEN_SOURCE\ >=\ 700 || _POSIX_C_SOURCE\ >=\ 200809L +.TP +glibc 2.10 より前: _ATFILE_SOURCE -.SH ÀâÌÀ -.BR openat () -¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï¡¢¤³¤Î man ¥Ú¡¼¥¸¤ÇÀâÌÀ¤·¤Æ¤¤¤ë°ã¤¤¤¬¤¢¤ë°Ê³°¤Ï¡¢ -.BR open (2) -¤ÈÁ´¤¯Æ±¤¸¤è¤¦¤ËÆ°ºî¤¹¤ë¡£ +.RE +.ad +.PD +.SH 説明 +\fBopenat\fP() システムコールは、この man ページで説明している違いがある以外は、 \fBopen\fP(2) と全く同じように動作する。 -.I pathname -¤Ç»ØÄꤵ¤ì¤ë¥Ñ¥¹Ì¾¤¬ÁêÂХѥ¹¤Ç¤¢¤ë¾ì¹ç¡¢ -¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿ -.I dirfd -¤Ç»²¾È¤µ¤ì¤ë¥Ç¥£¥ì¥¯¥È¥ê¤«¤é¤ÎÁêÂХѥ¹Ì¾¤È¤·¤Æ²ò¼á¤µ¤ì¤ë -.RB ( open (2) -¤Ç¤Ï¡¢ÁêÂХѥ¹¤Ï¸Æ¤Ó½Ð¤·¸µ¥×¥í¥»¥¹¤Î¥«¥ì¥ó¥È¥ï¡¼¥­¥ó¥°¥Ç¥£¥ì¥¯¥È¥ê¤«¤é¤Î -ÁêÂХѥ¹¤È¤Ê¤ë)¡£ +\fIpathname\fP で指定されるパス名が相対パスである場合、 ファイルディスクリプタ \fIdirfd\fP +で参照されるディレクトリからの相対パス名として解釈される (\fBopen\fP(2) +では、相対パスは呼び出し元プロセスのカレントワーキングディレクトリからの 相対パスとなる)。 -.I pathname -¤¬ÁêÂХѥ¹¤Ç¤¢¤ê¡¢¤«¤Ä -.I dirfd -¤¬ÆÃÊ̤ÊÃÍ -.B AT_FDCWD -¤Ç¤¢¤ë¾ì¹ç¡¢ -.I pathname -¤Ï -.RB ( open (2) -¤ÈƱ¤¸¤è¤¦¤Ë) ¸Æ¤Ó½Ð¤·¸µ¥×¥í¥»¥¹¤Î -¥«¥ì¥ó¥È¥ï¡¼¥­¥ó¥°¥Ç¥£¥ì¥¯¥È¥ê¤«¤é¤ÎÁêÂХѥ¹Ì¾¤È¤·¤Æ²ò¼á¤µ¤ì¤ë¡£ +\fIpathname\fP が相対パスであり、かつ \fIdirfd\fP が特別な値 \fBAT_FDCWD\fP である場合、 \fIpathname\fP は +(\fBopen\fP(2) と同じように) 呼び出し元プロセスの カレントワーキングディレクトリからの相対パス名として解釈される。 -.I pathname -¤¬ÀäÂХѥ¹¤Ç¤¢¤ë¾ì¹ç¡¢ -.I dirfd -¤Ï̵»ë¤µ¤ì¤ë¡£ -.SH ÊÖ¤êÃÍ -À®¸ù¤·¤¿¾ì¹ç¡¢ -.BR openat () -¤Ï¿·¤·¤¤¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÊÖ¤¹¡£ -¥¨¥é¡¼¤Î¾ì¹ç¡¢\-1 ¤¬ÊÖ¤µ¤ì¤Æ¡¢ -.I errno -¤Ë¤Ï¥¨¥é¡¼¤ò¼¨¤¹Ãͤ¬ÀßÄꤵ¤ì¤ë¡£ -.SH ¥¨¥é¡¼ -.BR open (2) -¤ÈƱ¤¸¥¨¥é¡¼¤¬ -.BR openat () -¤Ç¤âµ¯¤³¤ë¡£ -.BR openat () -¤Ç¤Ï¡¢¤½¤Î¾¤Ë°Ê²¼¤Î¥¨¥é¡¼¤¬µ¯¤³¤ë: -.TP -.B EBADF -.I dirfd -¤¬Í­¸ú¤Ê¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ç¤Ê¤¤¡£ -.TP -.B ENOTDIR -.I pathname -¤¬ÁêÂХѥ¹¤Ç¡¢¤«¤Ä -.I dirfd -¤¬¥Ç¥£¥ì¥¯¥È¥ê°Ê³°¤Î¥Õ¥¡¥¤¥ë¤ò»²¾È¤¹¤ë¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ç¤¢¤ë¡£ -.SH ¥Ð¡¼¥¸¥ç¥ó -.BR openat () -¤Ï Linux ¥«¡¼¥Í¥ë 2.6.16 ¤ÇÄɲ䵤줿¡£ -.SH ½àµò -POSIX.1-2008. -Solaris ¤Ë¤Ï¡¢¤³¤ì¤ÈƱ¤¸¤è¤¦¤Ê¥·¥¹¥Æ¥à¥³¡¼¥ë¤¬Â¸ºß¤¹¤ë¡£ +\fIpathname\fP が絶対パスである場合、 \fIdirfd\fP は無視される。 +.SH 返り値 +成功した場合、 \fBopenat\fP() は新しいファイルディスクリプタを返す。 エラーの場合、\-1 が返されて、 \fIerrno\fP +にはエラーを示す値が設定される。 +.SH エラー +\fBopen\fP(2) と同じエラーが \fBopenat\fP() でも起こる。 \fBopenat\fP() では、その他に以下のエラーが起こる: +.TP +\fBEBADF\fP +\fIdirfd\fP が有効なファイルディスクリプタでない。 +.TP +\fBENOTDIR\fP +\fIpathname\fP が相対パスで、かつ \fIdirfd\fP がディレクトリ以外のファイルを参照するファイルディスクリプタである。 +.SH バージョン +\fBopenat\fP() は Linux カーネル 2.6.16 で追加された。 +ライブラリによるサポートは glibc バージョン 2.4 で追加された。 +.SH 準拠 .\" The 'at' suffix in Solaris is actually double sensed. It .\" primarily referred to "extended *at*tributes", which are .\" handled by Solaris' O_XATTR flag, but was also intended @@ -123,51 +93,26 @@ Solaris .\" From: Don Cragun .\" Date: Tue, 14 Feb 2006 14:56:50 -0800 (PST) .\" -.SH Ãí°Õ -.BR openat () -¤ä "at" ¤¬¸å¤í¤ËÉÕ¤¤¤¿¤½¤Î¾¤ÎƱÍͤΥ·¥¹¥Æ¥à¥³¡¼¥ë¤Ï¡¢ -2 ¤Ä¤ÎÍýͳ¤Ë¤è¤êÄ󶡤µ¤ì¤Æ¤¤¤ë¡£ +POSIX.1\-2008. Solaris には、これと同じようなシステムコールが存在する。 +.SH 注意 +\fBopenat\fP() や "at" が後ろに付いたその他の同様のシステムコールは、 2 つの理由により提供されている。 -1 ¤ÄÌܤÎÍýͳ¤Ï¡¢ -¥«¥ì¥ó¥È¥ï¡¼¥­¥ó¥°¥Ç¥£¥ì¥¯¥È¥ê°Ê³°¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤¢¤ë¥Õ¥¡¥¤¥ë·²¤ò -.BR open (2) -¤Ç¥ª¡¼¥×¥ó¤¹¤ë¤È¤­¤Ëµ¯¤³¤ë²ÄǽÀ­¤¬¤¢¤ë¶¥¹ç¾õÂÖ (race condition) ¤ò¡¢ -.BR openat () -¤Ë¤è¤Ã¤Æ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤¬²óÈò¤Ç¤­¤ë¤¿¤á¤Ç¤¢¤ë¡£ -¤³¤ì¤é¤Î¶¥¹ç¾õÂ֤ϡ¢ -.BR open (2) -¤Ë»ØÄꤵ¤ì¤¿¥Ñ¥¹¤Î¥Ç¥£¥ì¥¯¥È¥êÉôʬ¤Î -(/ ¤Ç¶èÀÚ¤é¤ì¤¿) ¤¤¤¯¤Ä¤«¤Î¹½À®Í×ÁÇ (¤ò¥ª¡¼¥×¥ó¤¹¤ë½èÍý) ¤¬¡¢ -.BR open (2) -¤òÊÂÎó¤Ë¸Æ¤Ó½Ð¤¹½èÍý¤ËÊÑ´¹¤µ¤ì¤¿¾ì¹ç¤Ëµ¯¤³¤ë¡£ -¤³¤Î¤è¤¦¤Ê¶¥¹ç¤Ï¡¢Âоݥǥ£¥ì¥¯¥È¥ê¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ò¥ª¡¼¥×¥ó¤·¡¢ -¤½¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ò -.BR openat () -¤Î -.I dirfd -°ú¤­¿ô¤Ë»ØÄꤹ¤ë¤³¤È¤Ç²óÈò¤Ç¤­¤ë¡£ +1 つ目の理由は、 カレントワーキングディレクトリ以外のディレクトリにあるファイル群を \fBopen\fP(2) +でオープンするときに起こる可能性がある競合状態 (race condition) を、 \fBopenat\fP() +によってアプリケーションが回避できるためである。 これらの競合状態は、 \fBopen\fP(2) に指定されたパスのディレクトリ部分の (/ +で区切られた) いくつかの構成要素 (をオープンする処理) が、 \fBopen\fP(2) を並列に呼び出す処理に変換された場合に起こる。 +このような競合は、対象ディレクトリのファイルディスクリプタをオープンし、 そのファイルディスクリプタを \fBopenat\fP() の \fIdirfd\fP +引き数に指定することで回避できる。 -2 ¤ÄÌܤÎÍýͳ¤Ï¡¢ -¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ë¤è¤Ã¤Æ´ÉÍý¤µ¤ì¤ë¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿ (·²) ¤ò»È¤¦¤³¤È¤Ç¡¢ -.BR openat () -¤¬¥¹¥ì¥Ã¥ÉËè¤Î¤¤¤ï¤æ¤ë¡Ö¥«¥ì¥ó¥È¥ï¡¼¥­¥ó¥°¥Ç¥£¥ì¥¯¥È¥ê¡×¤ò¼ÂÁõ¤Ç¤­¤ë¤¿¤á¤Ç¤¢¤ë¡£ -(¤³¤Îµ¡Ç½¤Ï -.IR /proc/self/fd/ dirfd -¤ò»È¤Ã¤¿Î¢µ»¤Ç¤â¼Â¸½¤Ç¤­¤ë¤¬¡¢¤¢¤Þ¤ê¸úΨŪ¤Ç¤Ï¤Ê¤¤)¡£ -.SH ´ØÏ¢¹àÌÜ -.BR faccessat (2), -.BR fchmodat (2), -.BR fchownat (2), -.BR fstatat (2), -.BR futimesat (2), -.BR linkat (2), -.BR mkdirat (2), -.BR mknodat (2), -.BR open (2), -.BR readlinkat (2), -.BR renameat (2), -.BR symlinkat (2), -.BR unlinkat (2), -.BR utimensat (2), -.BR mkfifoat (3), -.BR path_resolution (7) +2 つ目の理由は、 アプリケーションによって管理されるファイルディスクリプタ (群) を使うことで、 \fBopenat\fP() +がスレッド毎のいわゆる「カレントワーキングディレクトリ」を実装できるためである。 (この機能は \fI/proc/self/fd/\fPdirfd +を使った裏技でも実現できるが、あまり効率的ではない)。 +.SH 関連項目 +\fBfaccessat\fP(2), \fBfchmodat\fP(2), \fBfchownat\fP(2), \fBfstatat\fP(2), +\fBfutimesat\fP(2), \fBlinkat\fP(2), \fBmkdirat\fP(2), \fBmknodat\fP(2), \fBopen\fP(2), +\fBreadlinkat\fP(2), \fBrenameat\fP(2), \fBsymlinkat\fP(2), \fBunlinkat\fP(2), +\fButimensat\fP(2), \fBmkfifoat\fP(3), \fBpath_resolution\fP(7) +.SH この文書について +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.53 の一部 +である。プロジェクトの説明とバグ報告に関する情報は +http://www.kernel.org/doc/man\-pages/ に書かれている。