| 日本−日本語 |
|
|
|
![]() |
HP-UX リファレンス: セクション 2 : システムコール > cchmod(2)HP-UX 11i Version 2: September 2004 |
|
名称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 の設定 ファイルのモードを変更するには、プロセスの実効ユーザー 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() が失敗した場合、ファイルのモードは変更されません。 次の値の 1 つが errno にセットされます。
fchmod() が失敗した場合、ファイルのモードは変更されません。 次の値の 1 つが errno にセットされます。
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||