.\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
+.\" and Copyright (C) 2006, 2014 Michael Kerrisk
.\"
.\" %%%LICENSE_START(VERBATIM)
.\" Permission is granted to make and distribute verbatim copies of this
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
-.TH CHMOD 2 2010\-09\-26 Linux "Linux Programmer's Manual"
+.\"
+.\" Japanese Version Copyright (c) 1996 Yosiaki Yanagihara
+.\" all rights reserved.
+.\" Translated 1996-06-24, Yosiaki Yanagihara <yosiaki@bsd2.kbnes.nec.co.jp>
+.\" Modified 1998-05-11, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
+.\" Updated & Modified 2001-06-25, Yuichi SATO <ysato@h4.dion.ne.jp>
+.\" Updated & Modified 2004-12-29, Yuichi SATO <ysato444@yahoo.co.jp>
+.\" Updated 2008-08-09, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v3.05
+.\"
+.TH CHMOD 2 2014\-08\-19 Linux "Linux Programmer's Manual"
.SH 名前
-chmod, fchmod \- ファイルのモードを変更する
+chmod, fchmod, fchmodat \- ファイルのモードを変更する
.SH 書式
+.nf
\fB#include <sys/stat.h>\fP
.sp
-\fBint chmod(const char *\fP\fIpath\fP\fB, mode_t \fP\fImode\fP\fB);\fP
+\fBint chmod(const char *\fP\fIpathname\fP\fB, mode_t \fP\fImode\fP\fB);\fP
.br
\fBint fchmod(int \fP\fIfd\fP\fB, mode_t \fP\fImode\fP\fB);\fP
.sp
+\fB#include <fcntl.h>\fP /* AT_* 定数の定義 */
+\fB#include <sys/stat.h>\fP
+.sp
+\fBint fchmodat(int \fP\fIdirfd\fP\fB, const char *\fP\fIpathname\fP\fB, mode_t \fP\fImode\fP\fB, int \fP\fIflags\fP\fB);\fP
+.fi
+.sp
.in -4n
glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7) 参照):
.in
|| /* glibc 2.12 以降: */ _POSIX_C_SOURCE\ >=\ 200809L
.RE
.PD
+.sp
+\fBfchmodat\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
+.RE
+.ad
+.PD
.ad
.SH 説明
-これらのシステムコールはファイルのアクセス許可 (permission) を変更する。 システムコール間の違いは、ファイルの指定の仕方だけである。
+システムコール \fBchmod\fP() と \fBfchmod\fP() は、ファイルのアクセス許可 (permission) を変更する。
+システムコール間の違いは、ファイルの指定の仕方だけである。
.IP * 2
-\fBchmod\fP() は、 \fIpath\fP で指定されたパス名を持つファイルの許可を変更する。 \fIpath\fP
-ã\81\8cã\82·ã\83³ã\83\9cã\83ªã\83\83ã\82¯ã\83»ã\83ªã\83³ã\82¯ã\81®å ´å\90\88ã\81¯ã\80\81ã\83ªã\83³ã\82¯ã\81®å±\95é\96\8bã\81\8cè¡\8cã\82\8fã\82\8cã\82\8bã\80\82
+\fBchmod\fP() は、 \fIpathname\fP で指定されたパス名を持つファイルの許可を変更する。 \fIpathname\fP
+がシンボリックリンクの場合は、リンクの展開が行われる。
.IP *
\fBfchmod\fP() は、オープンされたファイルディスクリプタ \fIfd\fP により参照されるファイルの許可を変更する。
.PP
新しいファイルのグループとして親ディレクトリと同じものを使う (\fBchown\fP(2) と \fB(\fPmkdir\fB(2)\fP の説明を参照)
.TP
\fBS_ISVTX\fP (01000)
-ã\82¹ã\83\86ã\82£ã\83\83ã\82ã\83¼ã\83»ã\83\93ã\83\83ã\83\88 (sticky bit) (å\89\8aé\99¤å\88¶é\99\90ã\83\95ã\83©ã\82°ã\80\81 \fBunlink\fP(2) ã\81®èª¬æ\98\8eã\82\92å\8f\82ç\85§)
+スティッキービット (sticky bit) (削除制限フラグ、 \fBunlink\fP(2) の説明を参照)
.TP
\fBS_IRUSR\fP (00400)
所有者による読み取り
プロセスの実効グループ ID または補助的なグループ ID にマッチしない場合、 \fBS_ISGID\fP
ビットはオフにされるが、これによってエラーが返されることはない。
-å®\89å\85¨ã\81®ã\81\9fã\82\81ã\81®å\87¦ç½®ã\81¨ã\81\97ã\81¦ã\80\81 ã\83\95ã\82¡ã\82¤ã\83«ã\83»ã\82·ã\82¹ã\83\86ã\83 ã\81«ã\82\88ã\81£ã\81¦ã\81¯ã\80\81ã\83\95ã\82¡ã\82¤ã\83«ã\81®æ\9b¸ã\81\8dè¾¼ã\81¿ã\82\92è¡\8cã\81\86æ\99\82ã\81« ã\82»ã\83\83ã\83\88ã\83»ã\83¦ã\83¼ã\82¶ã\83¼ ID ã\81¨ã\82»ã\83\83ã\83\88ã\83»ã\82°ã\83«ã\83¼ã\83\97 ID
+安全のための処置として、 ファイルシステムによっては、ファイルの書き込みを行う時に セット・ユーザー ID とセット・グループ ID
ビットと実行ビットが オフにされることがある。 (Linux では、書き込みプロセスが \fBCAP_FSETID\fP
-ã\82±ã\83¼ã\83\91ã\83\93ã\83ªã\83\86ã\82£ã\82\92æ\8c\81ã\81£ã\81¦ã\81\84ã\81ªã\81\84å ´å\90\88ã\81«ã\80\81ã\81\93ã\82\8cã\81\8cèµ·ã\81\93ã\82\8bã\80\82) ã\83\95ã\82¡ã\82¤ã\83«ã\83»ã\82·ã\82¹ã\83\86ã\83 ã\81®ä¸ã\81«ã\81¯ã\80\81ã\82¹ã\83¼ã\83\91ã\83¼ã\83»ユーザーだけが
-ç\89¹å\88¥ã\81®æ\84\8få\91³ã\82\92æ\8c\81ã\81¤ã\82¹ã\83\86ã\82£ã\83\83ã\82ã\83¼ã\83»ã\83\93ã\83\83ã\83\88ã\82\92è¨å®\9aã\81§ã\81\8dã\82\8bã\82\82ã\81®ã\81\8cã\81\82ã\82\8bã\80\82 ã\82¹ã\83\86ã\82£ã\83\83ã\82ã\83¼ã\83»ã\83\93ã\83\83ã\83\88ã\81¨ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\81«å¯¾ã\81\99ã\82\8b ã\82»ã\83\83ã\83\88ã\83»ã\83¦ã\83¼ã\82¶ã\83¼ (ã\82°ã\83«ã\83¼ã\83\97)ã\83»ID
+ã\82±ã\83¼ã\83\91ã\83\93ã\83ªã\83\86ã\82£ã\82\92æ\8c\81ã\81£ã\81¦ã\81\84ã\81ªã\81\84å ´å\90\88ã\81«ã\80\81ã\81\93ã\82\8cã\81\8cèµ·ã\81\93ã\82\8bã\80\82) ã\83\95ã\82¡ã\82¤ã\83«ã\82·ã\82¹ã\83\86ã\83 ã\81®ä¸ã\81«ã\81¯ã\80\81ã\82¹ã\83¼ã\83\91ã\83¼ユーザーだけが
+ç\89¹å\88¥ã\81®æ\84\8få\91³ã\82\92æ\8c\81ã\81¤ã\82¹ã\83\86ã\82£ã\83\83ã\82ã\83¼ã\83\93ã\83\83ã\83\88ã\82\92è¨å®\9aã\81§ã\81\8dã\82\8bã\82\82ã\81®ã\81\8cã\81\82ã\82\8bã\80\82 ã\82¹ã\83\86ã\82£ã\83\83ã\82ã\83¼ã\83\93ã\83\83ã\83\88ã\81¨ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\81«å¯¾ã\81\99ã\82\8b ã\82»ã\83\83ã\83\88ã\83»ã\83¦ã\83¼ã\82¶ã\83¼ (ã\82°ã\83«ã\83¼ã\83\97) ID
ビットについては、 \fBstat\fP(2) を見よ。
+.\"
+.\"
NFS ファイルシステム上では、パーミッションを制限すると、 既にオープンされているファイルに対してすぐに影響が及ぶ。
これはアクセス制御がサーバー上で行われているが、 オープンされているファイルはクライアント側で管理されているためである。
クライアント側でファイル属性のキャッシュが有効になっている場合に、 パーミッションの制限を緩くすると、
他のクライアントに情報が伝わるのが遅れるかもしれない。
+.SS fchmodat()
+\fBfchmodat\fP() システムコールは \fBchmod\fP() と全く同様に動作するが、以下で説明する点が異なる。
+
+\fIpathname\fP で指定されたパス名が相対パスの場合、このパス名はファイルディスクリプター \fIdirfd\fP
+が参照するディレクトリに対する相対パスと解釈される (\fBchmod\fP()
+に相対パス名を渡した場合のように、呼び出したプロセスのカレントワーキングディレクトリに対する相対パスではない)。
+
+\fIpathname\fP で指定されたパス名が相対パスで、 \fIdirfd\fP が特別な値 \fBAT_FDCWD\fP の場合、 (\fBchmod\fP()
+と同様に) \fIpathname\fP は呼び出したプロセスのカレントワーキングディレクトリに対する相対パスと解釈される。
+
+\fIpathname\fP で指定されたパス名が絶対パスの場合、 \fIdirfd\fP は無視される。
+
+\fIflags\fP には 0 か、以下のフラグを指定することができる。
+.TP
+\fBAT_SYMLINK_NOFOLLOW\fP
+\fIpathname\fP
+がシンボリックリンクの場合、リンクの展開を行わない。代わりに、リンク自身に対して操作を行う。このフラグは現在のところ実装されていない。
+.PP
+\fBfchmodat\fP() の必要性についての説明については \fBopenat\fP(2) を参照。
.SH 返り値
成功した場合は 0 が返される。エラーの場合は \-1 が返され、 \fIerrno\fP が適切に設定される。
.SH エラー
-ファイル・システムによっては他のエラーを返す場合がある。 \fBchmod\fP() で一般的なエラーを以下に挙げる。
+ファイルシステムによっては、下記の一覧にない他のエラーが返されることもある。
+
+\fBchmod\fP() のごく一般的なエラーを挙げる:
.TP
\fBEACCES\fP
パス名の構成要素に検索許可がない (\fBpath_resolution\fP(7) も見よ)。
.TP
\fBEFAULT\fP
-\fIpath\fP がアクセスできるアドレス空間外を指している。
+\fIpathname\fP がアクセス可能なアドレス空間の外を指している。
.TP
\fBEIO\fP
I/O エラーが発生した。
.TP
\fBELOOP\fP
-\fIpath\fP を解決する際に遭遇したシンボリック・リンクが多過ぎる。
+\fIpathname\fP を解決するときに、解決すべきシンボリックリンクが多すぎた。
.TP
\fBENAMETOOLONG\fP
-\fIpath\fP が長過ぎる。
+\fIpathname\fP が長過ぎる。
.TP
\fBENOENT\fP
ファイルが存在しない。
実効 UID がファイルの所有者と一致せず、プロセスに特権がない (Linux では \fBCAP_FOWNER\fP ケーパビリティを持たない)。
.TP
\fBEROFS\fP
-ã\83\95ã\82¡ã\82¤ã\83«ã\81\8cèªã\81¿è¾¼ã\81¿å°\82ç\94¨ (read only) ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\83»ã\82·ã\82¹ã\83\86ã\83 ä¸\8aã\81«ã\81\82ã\82\8bã\80\82
+ファイルが読み込み専用 (read only) のファイルシステム上にある。
.PP
\fBfchmod\fP() で一般的なエラーを挙げる:
.TP
\fBEBADF\fP
-ã\83\95ã\82¡ã\82¤ã\83«ã\83»ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ \fIfd\fP が有効でない。
+ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ \fIfd\fP が有効でない。
.TP
\fBEIO\fP
上記を参照。
.TP
\fBEROFS\fP
上記を参照。
+.PP
+\fBchmod\fP() で発生するのと同じエラーが \fBfchmodat\fP() でも起こる。 \fBfchmodat\fP() では以下のエラーも発生する。
+.TP
+\fBEBADF\fP
+\fIdirfd\fP が適切なファイルディスクリプタでない。
+.TP
+\fBEINVAL\fP
+\fIflags\fP に無効なフラグが指定された。
+.TP
+\fBENOTDIR\fP
+\fIpathname\fP が相対パスで、 \fIdirfd\fP がディレクトリ以外のファイルを参照しているファイルディスクリプタである。
+.TP
+\fBENOTSUP\fP
+\fIflags\fP に対応していないフラグ \fBAT_SYMLINK_NOFOLLOW\fP が指定された。
+.SH バージョン
+\fBfchmodat\fP() はカーネル 2.6.16 で Linux に追加された。 ライブラリによるサポートはバージョン 2.4 以降の glibc
+で利用できる。
.SH 準拠
-4.4BSD, SVr4, POSIX.1\-2001.
+\fBchmod\fP(), \fBfchmod\fP(): 4.4BSD, SVr4, POSIX.1\-2001i, POSIX.1\-2008.
+
+\fBfchmodat\fP(): POSIX.1\-2008.
+.SH 注意
+.SS "C ライブラリとカーネル ABI の違い"
+GNU C ライブラリの \fBfchmodat\fP() ラッパー関数は、このページで説明している POSIX
+で規定されたインターフェースを実装している。このインターフェースは、内部で呼ばれる Linux のシステムコールとは異なる。システムコールは
+\fIflags\fP 引き数を\fI持たない\fP。
+.SS "glibc での注意"
+\fBfchmodat\fP() が利用できない古いカーネルでは、 glibc ラッパー関数は \fBchmod\fP() を使用するモードにフォールバックする。
+\fIpathname\fP が相対パスの場合、 glibc は \fIdirfd\fP 引き数に対応する \fI/proc/self/fd\fP
+のシンボリックリンクに基づいてパス名を構成する。
.SH 関連項目
-\fBchown\fP(2), \fBexecve\fP(2), \fBfchmodat\fP(2), \fBopen\fP(2), \fBstat\fP(2),
-\fBpath_resolution\fP(7)
+\fBchown\fP(2), \fBexecve\fP(2), \fBopen\fP(2), \fBstat\fP(2), \fBpath_resolution\fP(7),
+\fBsymlink\fP(7)
.SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.53 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.78 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man\-pages/ に書かれている。