_chmod、_wchmod
更新 : 2007 年 11 月
ファイルのアクセス許可の設定を変更します。
int _chmod(
const char *filename,
int pmode
);
int _wchmod(
const wchar_t *filename,
int pmode
);
パラメータ
filename
既存ファイル名。pmode
ファイルのアクセス許可の設定。
戻り値
アクセス許可の設定が正常に変更された場合、これらの関数は 0 を返します。戻り値 -1 は失敗を意味します。指定されたファイルが見つからない場合、errno は ENOENT に設定されます。パラメータが無効の場合、errno は EINVAL に設定されます。
解説
_chmod 関数は、filename に指定されたファイルのアクセス許可の設定を変更します。アクセス許可の設定によって、ファイルに対する読み取りアクセスおよび書き込みアクセスが制御されます。整数式 pmode には、SYS\Stat.h で定義されている次の記号定数のいずれか、または両方を指定します。
_S_IWRITE
書き込み許可。_S_IREAD
読み取り許可。_S_IREAD | _S_IWRITE
ファイルの読み取りおよび書き込みを許可します。
両方の定数を指定するときは、ビットごとの OR 演算子 (|) で結合します。書き込み許可属性を指定しないと、ファイルは読み取り専用になります。すべてのファイルが常に読み取り可能であるため、書き込み専用アクセス許可は指定できないことに注意してください。このように、_S_IWRITE モードと _S_IREAD | _S_IWRITE モードは同じです。
_wchmod は _chmod のワイド文字バージョンです。_wchmod の filename 引数はワイド文字列です。引数の指定以外では、_wchmod と _chmod の動作は同じです。
この関数は、パラメータを検証します。pmode が記号定数 (manifest 定数) の 1 つの組み合わせではない場合、または別の定数セットを指定すると、この関数はこれらを無視します。filename が NULL の場合は、「パラメータの検証」に説明されているように、無効なパラメータ ハンドラが呼び出されます。実行の継続が許可された場合、この関数は errno を EINVAL に設定して -1 を返します。
汎用テキスト ルーチンのマップ
Tchar.h のルーチン |
_UNICODE および _MBCS が未定義の場合 |
_MBCS が定義されている場合 |
_UNICODE が定義されている場合 |
---|---|---|---|
_tchmod |
_chmod |
_chmod |
_wchmod |
必要条件
ルーチン |
必須ヘッダー |
オプション ヘッダー |
---|---|---|
_chmod |
<io.h> |
<sys/types.h>、<sys/stat.h>、<errno.h> |
_wchmod |
<io.h> または <wchar.h> |
<sys/types.h>、<sys/stat.h>、<errno.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// crt_chmod.c
// This program uses _chmod to
// change the mode of a file to read-only.
// It then attempts to modify the file.
//
#include <sys/types.h>
#include <sys/stat.h>
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
// Change the mode and report error or success
void set_mode_and_report(char * filename, int mask)
{
// Check for failure
if( _chmod( filename, mask ) == -1 )
{
// Determine cause of failure and report.
switch (errno)
{
case EINVAL:
fprintf( stderr, "Invalid parameter to chmod.\n");
break;
case ENOENT:
fprintf( stderr, "File %s not found\n", filename );
break;
default:
// Should never be reached
fprintf( stderr, "Unexpected error in chmod.\n" );
}
}
else
{
if (mask == _S_IREAD)
printf( "Mode set to read-only\n" );
else if (mask & _S_IWRITE)
printf( "Mode set to read/write\n" );
}
fflush(stderr);
}
int main( void )
{
// Create or append to a file.
system( "echo /* End of file */ >> crt_chmod.c_input" );
// Set file mode to read-only:
set_mode_and_report("crt_chmod.c_input ", _S_IREAD );
system( "echo /* End of file */ >> crt_chmod.c_input " );
// Change back to read/write:
set_mode_and_report("crt_chmod.c_input ", _S_IWRITE );
system( "echo /* End of file */ >> crt_chmod.c_input " );
}
A line of text.
Mode set to read-only
Access is denied.
Mode set to read/write