other versions
other sections
CHMOD(2) | Linux Programmer's Manual | CHMOD(2) |
名前¶
chmod, fchmod, fchmodat - ファイルのモードを変更する書式¶
#include <sys/stat.h> int chmod(const char *pathname, mode_t mode);int fchmod(int fd, mode_t mode); #include <fcntl.h> /* AT_* 定数の定義 */ #include <sys/stat.h> int fchmodat(int dirfd, const char *pathname, mode_t mode, int flags);
glibc 向けの機能検査マクロの要件 ( feature_test_macros(7) 参照):
fchmod():
_BSD_SOURCE || _XOPEN_SOURCE >= 500 ||
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
|| /* glibc 2.12 以降: */
_POSIX_C_SOURCE >= 200809L
fchmodat():
- glibc 2.10 以降:
- _XOPEN_SOURCE >= 700 || _POSIX_C_SOURCE >= 200809L
- glibc 2.10 より前:
- _ATFILE_SOURCE
説明¶
システムコール chmod() と fchmod() は、ファイルのアクセス許可 (permission) を変更する。 システムコール間の違いは、ファイルの指定の仕方だけである。- *
- chmod() は、 pathname で指定されたパス名を持つファイルの許可を変更する。 pathname がシンボリックリンクの場合は、リンクの展開が行われる。
- *
- fchmod() は、オープンされたファイルディスクリプタ fd により参照されるファイルの許可を変更する。
- S_ISUID (04000)
- set-user-ID (execve(2) 時にプロセスの実効ユーザ ID にセットされる)
- S_ISGID (02000)
- set-group-ID (以下の場合に (execve(2) 実行時にプロセスの実効グループ ID にセットされる、 強制ロック (mandatory locking) を行う ( fcntl(2) の説明を参照)、 新しいファイルのグループとして親ディレクトリと同じものを使う ( chown(2) と (mkdir(2) の説明を参照)
- S_ISVTX (01000)
- スティッキービット (sticky bit) (削除制限フラグ、 unlink(2) の説明を参照)
- S_IRUSR (00400)
- 所有者による読み取り
- S_IWUSR (00200)
- 所有者による書き込み
- S_IXUSR (00100)
- 所有者による実行 (execute) / 検索 (search) (「検索」はディレクトリに対して適用されるもので、 そのディレクトリ内のエントリーへアクセスできるかを意味する)
- S_IRGRP (00040)
- グループによる読み取り
- S_IWGRP (00020)
- グループによる書き込み
- S_IXGRP (00010)
- グループによる実行 / 検索
- S_IROTH (00004)
- 他人 (others) による読み取り
- S_IWOTH (00002)
- 他人による書き込み
- S_IXOTH (00001)
- 他人による実行 / 検索
fchmodat()¶
fchmodat() システムコールは chmod() と全く同様に動作するが、以下で説明する点が異なる。 pathname で指定されたパス名が相対パスの場合、このパス名はファイルディスクリプター dirfd が参照するディレクトリに対する相対パスと解釈される ( chmod() に相対パス名を渡した場合のように、呼び出したプロセスのカレントワーキングディレクトリに対する相対パスではない)。 pathname で指定されたパス名が相対パスで、 dirfd が特別な値 AT_FDCWD の場合、 ( chmod() と同様に) pathname は呼び出したプロセスのカレントワーキングディレクトリに対する相対パスと解釈される。 pathname で指定されたパス名が絶対パスの場合、 dirfd は無視される。 flags には 0 か、以下のフラグを指定することができる。- AT_SYMLINK_NOFOLLOW
- pathname がシンボリックリンクの場合、リンクの展開を行わない。代わりに、リンク自身に対して操作を行う。このフラグは現在のところ実装されていない。
返り値¶
成功した場合は 0 が返される。エラーの場合は -1 が返され、 errno が適切に設定される。エラー¶
ファイルシステムによっては、下記の一覧にない他のエラーが返されることもある。 chmod() のごく一般的なエラーを挙げる:- EACCES
- パス名の構成要素に検索許可がない ( path_resolution(7) も見よ)。
- EFAULT
- pathname がアクセス可能なアドレス空間の外を指している。
- EIO
- I/O エラーが発生した。
- ELOOP
- pathname を解決するときに、解決すべきシンボリックリンクが多すぎた。
- ENAMETOOLONG
- pathname が長過ぎる。
- ENOENT
- ファイルが存在しない。
- ENOMEM
- カーネルに十分なメモリがない。
- ENOTDIR
- パス名の構成要素がディレクトリではない。
- EPERM
- 実効 UID がファイルの所有者と一致せず、プロセスに特権がない (Linux では CAP_FOWNER ケーパビリティを持たない)。
- EROFS
- ファイルが読み込み専用 (read only) のファイルシステム上にある。
- EBADF
- ファイルディスクリプタ fd が有効でない。
- EIO
- 上記を参照。
- EPERM
- 上記を参照。
- EROFS
- 上記を参照。
- EBADF
- dirfd が適切なファイルディスクリプタでない。
- EINVAL
- flags に無効なフラグが指定された。
- ENOTDIR
- pathname が相対パスで、 dirfd がディレクトリ以外のファイルを参照しているファイルディスクリプタである。
- ENOTSUP
- flags に対応していないフラグ AT_SYMLINK_NOFOLLOW が指定された。
バージョン¶
fchmodat() はカーネル 2.6.16 で Linux に追加された。 ライブラリによるサポートはバージョン 2.4 以降の glibc で利用できる。準拠¶
chmod(), fchmod(): 4.4BSD, SVr4, POSIX.1-2001i, POSIX.1-2008. fchmodat(): POSIX.1-2008.注意¶
GNU C ライブラリの fchmodat() ラッパー関数は、このページで説明している POSIX で規定されたインターフェースを実装している。このインターフェースは、内部で呼ばれる Linux のシステムコールとは異なる。システムコールは flags 引き数を持たない。関連項目¶
chown(2), execve(2), open(2), stat(2), path_resolution(7), symlink(7)この文書について¶
この man ページは Linux man-pages プロジェクトのリリース 3.65 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2014-02-21 | Linux |