_access_s、_waccess_s
ファイルの読み取り / 書き込みアクセス許可を確認します。この関数は、「CRT のセキュリティ機能」に説明されているように、_access、_waccess のセキュリティが強化されたバージョンです。
errno_t _access_s(
const char *path,
int mode
);
errno_t _waccess_s(
const wchar_t *path,
int mode
);
パラメーター
path
ファイルまたはディレクトリ パス。mode
アクセス許可の設定。
戻り値
ファイルに指定されたモードがの場合0 が返されます。ファイル名が特定のモードでアクセス可能であることなく関数の戻り値はエラー コードを返します。この場合関数の戻り値は次のとおりまたは同じ値に設定 errno のエラー コードを設定します。
EACCES
アクセスの拒否。ファイルのアクセス許可の設定は指定されたアクセスできません。ENOENT
見つかったファイル名またはパス。EINVAL
無効なパラメーター。
詳細については、「errno、_doserrno、_sys_errlist、および _sys_nerr」を参照してください。
解説
ファイルで使用する場合は**_access_s** の関数は指定されたファイルをmode の値で指定されたようにアクセスできるかどうかを判定します。ディレクトリを使用すると**_access_s** は指定したディレクトリが存在するかどうかを決定します。Windows 2000 以降のオペレーティング システムではすべてのディレクトリが読み取りおよび書き込みアクセス。
モードの値 |
チェックはファイルです。 |
---|---|
00 |
プロシージャだけです。 |
02 |
書き込みアクセス許可。 |
04 |
読み取りアクセス許可。 |
06 |
アクセス許可と書き込み。 |
ファイルの読み取りまたは書き込みのアクセス許可はファイルを開くには機能を確認するだけでは不十分です。たとえばファイルが別のプロセスによってロックされている場合は 0 を返します _access_s がアクセスできないことがあります。
_waccess_s は _waccess_s への path の引数はワイド文字列の _access_s のワイド文字バージョンです。それ以外では、_waccess_s と _access_s の動作は同じです。
これらの関数では、パラメーターの検証が行われます。path が NULL の場合またはが有効 mode モードを指定しない場合無効なパラメーター ハンドラーが パラメーターの検証 に説明されているように開始されます。実行の継続が許可された場合、これらの関数は errno を EINVAL に設定し、EINVAL を返します。
汎用テキスト ルーチンのマップ
Tchar.h のルーチン |
_UNICODE および _MBCS が未定義の場合 |
_MBCS が定義されている場合 |
_UNICODE が定義されている場合 |
---|---|---|---|
_taccess_s |
_access_s |
_access_s |
_waccess_s |
必要条件
ルーチン |
必須ヘッダー |
オプション ヘッダー |
---|---|---|
_access_s |
<io.h> |
<errno.h> |
_waccess_s |
<wchar.h> または <io.h> |
<errno.h> |
使用例
この例ではという名前の crt_access_s.c あるかどうかおよび書き込みを許可するかどうかを確認するにはファイル _access_s を使用します。
// crt_access_s.c
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
errno_t err = 0;
// Check for existence.
if ((err = _access_s( "crt_access_s.c", 0 )) == 0 )
{
printf_s( "File crt_access_s.c exists.\n" );
// Check for write permission.
if ((err = _access_s( "crt_access_s.c", 2 )) == 0 )
{
printf_s( "File crt_access_s.c does have "
"write permission.\n" );
}
else
{
printf_s( "File crt_access_s.c does not have "
"write permission.\n" );
}
}
else
{
printf_s( "File crt_access_s.c does not exist.\n" );
}
}