Unix-system-calls-chmod

提供:Dev Guides
移動先:案内検索

[top]#

[[File:]]

[[File:]]

|Web |This Site

  • 初心者向けのUnix *
  • 高度なUnix *

選択した読書

Copyright©2014 by finddevguides

  Home     References     Discussion Forums     About TP  

chmod()-Unix、Linuxシステムコール

[[File:]] image :http://www.finddevguides.com/images/next.gif [next] image:http://www.finddevguides.com/add- this.gif [AddThisソーシャルブックマークボタン]

広告

NAME

chmod、fchmod-ファイルのパーミッションを変更する

概要

#include <sys/types.h> #include <sys/stat.h> int chmod(const char* path, mode_t mode); int fchmod(int fildes, mode_t mode);

説明

_path_で指定されたファイルまたは_fildes_で参照されたファイルのモードが変更されます。

モードは次のいずれかで指定されます:

Tag Description
S_ISUID 04000 set user ID on execution
S_ISGID 02000 set group ID on execution
S_ISVTX 01000 sticky bit
S_IRUSR 00400 read by owner
S_IWUSR 00200 write by owner
S_IXUSR 00100 execute/search by owner
S_IRGRP 00040 read by group
S_IWGRP 00020 write by group
S_IXGRP 00010 execute/search by group
S_IROTH 00004 read by others
S_IWOTH 00002 write by others
S_IXOTH 00001 execute/search by others

呼び出しプロセスの実効UIDはファイルの所有者と一致するか、プロセスに特権が必要です(Linux: CAP_FOWNER 機能が必要です)。

呼び出しプロセスに特権がなく(Linux: CAP_FSETID 機能がない)、ファイルのグループがプロセスの実効グループIDまたはその補助グループIDの1つと一致しない場合、S_ISGIDビットがオンになりますオフですが、これによりエラーが返されることはありません。

セキュリティ対策として、ファイルシステムによっては、ファイルが書き込まれた場合にset-user-IDおよびset-group-ID実行ビットがオフになる場合があります。 (Linuxでは、書き込みプロセスに CAP_FSETID 機能がない場合にこれが発生します。)一部のファイルシステムでは、スーパーユーザーのみがスティッキービットを設定できます。これは特別な意味を持つ場合があります。 スティッキビット、およびディレクトリのset-user-IDおよびset-group-IDビットについては、 stat (2)を参照してください。

NFSファイルシステムでは、アクセス制御はサーバー上で行われますが、開いているファイルはクライアントによって維持されるため、アクセス許可を制限すると、すでに開いているファイルにすぐに影響します。 他のクライアントで属性のキャッシュが有効になっている場合、他のクライアントのアクセス許可の拡大が遅れることがあります。

返り値

成功すると、ゼロが返されます。 エラーの場合、-1が返され、_errno_が適切に設定されます。

エラー

ファイルシステムによっては、他のエラーが返される場合があります。 chmod ()のより一般的なエラーを以下にリストします。

エラーコード

説明

*EACCES*

パスプレフィックスのコンポーネントに対する検索許可が拒否されました。 ( path_resolution (2)も参照してください。)

*EFAULT*

_path_は、アクセス可能なアドレス空間の外側を指します。

*EIO*

I/Oエラーが発生しました。

*ELOOP*

_path_の解決中に検出されたシンボリックリンクが多すぎます。

*ENAMETOOLONG*

_path_が長すぎます。

*ENOENT*

ファイルが存在しません。

*ENOMEM*

カーネルメモリが不足していました。

*ENOTDIR*

パスプレフィックスのコンポーネントはディレクトリではありません。

*EPERM*

有効なUIDはファイルの所有者と一致せず、プロセスには特権がありません(Linux: CAP_FOWNER 機能はありません)。

*EROFS*

指定されたファイルは読み取り専用ファイルシステムにあります。

*fchmod* ()の一般的なエラーは次のとおりです。
*EBADF*

ファイル記述子_fildes_が無効です。

*EIO*

上記を参照。

*EPERM*

上記を参照。

*EROFS*

上記を参照。

準拠

4.4BSD、SVr4、POSIX.1-2001。

関連項目

[[File:]] image :http://www.finddevguides.com/images/next.gif [next] [[File:]]

広告

  
Advertisements