_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 以降のオペレーティング システムでは、すべてのディレクトリに読み取りアクセスおよび書き込みアクセスが許可されています。
mode 値 |
ファイルに対するチェック |
---|---|
00 |
存在するかどうかだけ |
02 |
書き込みアクセス許可 |
04 |
読み取りアクセス許可 |
06 |
読み取りおよび書き込みアクセス許可 |
ファイルの読み取りまたは書き込みアクセス許可は、ファイルを開くには十分ではありません。 たとえば、ファイルが別のプロセスによってロックされていると、_access_s が 0 を返す場合でも、このファイルにアクセスできない場合があります。
_waccess_s 関数は、_access_s 関数のワイド文字バージョンであり、_waccess_s 関数の引数 path は、ワイド文字列です。 それ以外では、_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> |
使用例
この例では、_access_s を使用して、crt_access_s.c という名前のファイルについて、ファイルが存在するかどうか、および書き込みが許可されているかどうかを確認します。
// 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" );
}
}