本文に進む 日本−日本語
日本HPホーム 製品とサービス お客様サポート/ ダウンロード ソリューション ご購入の方法
≫ お問い合わせ
詳細検索オプション
日本HPホーム
HP-UX リファレンス: セクション 2 : システムコール > c

chmod(2)

HP-UX 11i Version 2: September 2004
≫ 

テクニカル ドキュメント

PDF版
フィードバック
ここから本文が始まります

 ≫ 目次

 ≫ 索引

名称

chmod()、fchmod() ― ファイルのアクセスモード (パーミッション ) の変更

構文

#include <sys/stat.h>

int chmod(const char *path, mode_t mode);

int fchmod(int fildes, mode_t mode);

説明

chmod()fchmod() システムコール は、 mode で指定されているビットパターンにしたがって、ファイルのモードの アクセスパーミッションを設定します。 path は、ファイルを指定するパス名を示します。 fildes は、ファイル記述子です。

アクセスパーミッション ビットを表現する、以下の記号定数は、 <sys/stat.h> 内で定義されており、 mode 引き数を構成するために使われます。 mode の値は、希望するパーミッションに対する記号定数の値のビットごとの論理和 になります。

S_ISUID 04000 実行時におけるユーザー ID の設定
S_ISGID 02000 実行時におけるグループ ID の設定
S_ENFMT 02000 強制的なレコードロック
S_ISVTX 01000 実行終了時のテキストイメージの保存
S_IRUSR 00400 所有者による読み取り
S_IWUSR 00200 所有者による書き込み
S_IXUSR 00100 所有者による実行 (ディレクトリの場合は、検索)
S_IRGRP 00040 グループによる読み取り
S_IWGRP 00020 グループによる書き込み
S_IXGRP 00010 グループによる実行 (ディレクトリの場合は、検索)
S_IROTH 00004 他のユーザー (つまり、他の誰でも) による読み取り
S_IWOTH 00002 他のユーザーによる書き込み
S_IXOTH 00001 他のユーザーによる実行 (ディレクトリの場合は、検索)

ファイルのモードを変更するには、プロセスの実効ユーザー ID が、ファイルの所有者か 適切な特権 を持つユーザーのものと一致していなくてはいけません。

プロセスの実効ユーザー ID が 適切な特権 を持つユーザーのものでない場合は、 モードビット S_ISVTX がクリアされます。

プロセスの実効ユーザー ID が 適切な特権 を持つユーザーのものではなく、 プロセスの実効グループ ID がファイルのグループ ID と一致せず、補助グループリスト内のどのグループ ID もファイルのグループ ID と一致しない場合は、 モードビット S_ISGID がクリアされます。

モードビット S_ENFMT (S_ISGID と同じ) は、グループに実行許可のないファイルに対する強制的なファイルロッキング モード lockf(2)fcntl(2) を参照) に使われます。 これは、そのようなファイルに対する、 open()、 creat()、 read()、 write() 呼び出しに影響を与えます open(2)creat(2)read(2)write(2) を参照)。

実行可能ファイルが共有テキストになっている場合、 モードビット S_ISVTX は、ファイルが最後に実行されたときに、 ファイルのプログラムテキスト部のスワップ領域イメージをシステムが 破棄してしまうのを防止します。 この場合、次のユーザーがファイルを実行するときに、 テキストをファイルシステムから読み込まずに、単にスワップインするだけ でよいので、時間を節約できます。

ディレクトリに対してモードビット S_ISVTX (スティッキービット) がセットされている場合、そのディレクトリにあるファイルの削除および名称変更を行えるのは、そのファイルの所有者、そのディレクトリの所有者、またはスーパーユーザーだけです (この制限は、ディレクトリのモードでこのような操作が他に許されている場合にも適用されます)。

chmod() で指定されているパスの最後の構成要素がシンボリックリンクになっているとき、 このリンクはたどられ、パス名変換は続けられます。 chmod() は、リンク自体のアクセスモードを変更するのではなく、シンボリックリンクの リンク先のアクセスモードを変更します。

アクセス制御リスト - HFS ファイルシステムのみ

chmod() が実行されると、ファイルのアクセス制御リスト (ACL) の中にあるすべての オプションのエントリーは削除されます (この動作は、 IEEE 標準 POSIX 1003.1-1988 に従っています)。 ファイルのアクセス制御リストにあるオプションのエントリーを 保存するには、 getacl()setacl() を使ってセーブし、後でリストアする必要があります getacl(2)setacl(2) を参照)。

アクセス制御リストエントリーのパーミッションビットをセットするには、 chmod() の代わりに setacl() を使います。

アクセス制御リスト - JFS ファイルシステムのみ

chmod() が実行されると、ファイルのアクセス制御リスト (ACL) にあるオプションのエントリーで許可されている有効なパーミッションが変更されます。 特に、ファイルの所有者、所有グループ、またはその他のユーザーから、読み取り、書き込み、および実行パーミッションを削除したい場合は、 chmod() を使用すれば、期待したとおりの結果が得られます。これは、 chmod() が、ACL の class エントリーに影響を与え、追加されるユーザーやグループに対しても、オプションの ACL エントリーを通して許可されるアクセスを制限するからです。変更が期待したとおりになっているかどうかは、 chmod() を実行したファイルに対して getacl(1) を実行し、パーミッションが 0 以外になっているすべての (デフォルトでない) オプション ACL エントリーにもコメント # effective:--- があることを確認することで検証できます。

アクセス制御リストエントリーのパーミッションビットをセットするには、 chmod() の代わりに setacl() を使います。

アクセス制御リストエントリーについての詳細は、 acl(5) を参照してください。

戻り値

chmod() は次の値を返します。

 0 

正常終了。

-1 

失敗。 エラーの種類を示す値が errno にセットされます。

エラー

chmod() が失敗した場合、ファイルのモードは変更されません。 次の値の 1 つが errno にセットされます。

[EACCES] 

パスプレフィックスの構成要素に対して、検索パーミッションがない場合。

[EFAULT] 

path が、プロセスに割り当てられたアドレス空間の外を指している場合。 このエラーの検出は、インプリメンテーションに依存します。

[EINVAL] 

path または fildes 記述子が適切なファイルを参照していない場合。

[ELOOP] 

path の変換におけるシンボリックリンクの数が多すぎる場合。

[ENAMETOOLONG] 

_POSIX_NO_TRUNC が有効であるとき、 path の構成要素が NAME_MAX バイトを超えるか、あるいは、 path 全体が PATH_MAX バイトを超える場合。

[ENOENT] 

path の構成要素、または path で指定されたファイルが存在しない場合。

[ENOTDIR] 

パスプレフィックスの構成要素がディレクトリでない場合。

[EPERM] 

実効ユーザー ID がファイルの所有者のものと一致せず、また、その実効ユーザー ID が 適切な特権を持つユーザーのものでもない場合。

[EROFS] 

指定されたファイルが、読み取り専用のファイルシステムにある場合。

fchmod() が失敗した場合、ファイルのモードは変更されません。 次の値の 1 つが errno にセットされます。

[EBADF] 

fildes が有効なファイル記述子ではない場合。

[EPERM] 

実効ユーザー ID がファイルの所有者のものと一致せず、また、その実効ユーザー ID が適切な特権を持つユーザーのものでもない場合。

[EINVAL] 

path または fildes 記述子が適切なファイルを参照していない場合。

[EROFS] 

指定されたファイルが、読み取り専用のファイルシステムにある場合。

著者

chmod() は、AT&T、カリフォルニア大学バークレイ校と HP で開発されました。

fchmod() は、カリフォルニア大学バークレイ校で開発されました。

参照

chmod(1)、 getacl(1)、 chown(2)、 creat(2)、 fcntl(2)、 getacl(2)、 read(2)、 lockf(2)、 mknod(2)、 open(2)、 setacl(2)、 write(2)、 acl(5)、 aclv(5)

標準準拠

chmod(): AES、SVID2、SVID3、XPG2、XPG3、XPG4、FIPS 151-2、POSIX.1
fchmod(): AES、SVID3

印刷用画面へ
プライバシー 本サイト利用時の合意事項
© 1983-2004 Hewlett-Packard Development Company, L.P.