_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 も同じ値に設定します。

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 の動作は同じです。

これらの関数では、パラメーターの検証が行われます。 有効なモードがNULL指定されている場合、またはmode指定されていない場合pathは、「パラメーターの検証」で説明されているように、無効なパラメーター ハンドラーが呼び出されます。 実行の継続が許可された場合、これらの関数は errnoEINVAL に設定し、EINVAL を返します。

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT のグローバル状態」を参照してください

汎用テキスト ルーチンのマップ

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" );
    }
}
File crt_access_s.c exists.
File crt_access_s.c does not have write permission.

関連項目

ファイル処理
_access, _waccess
_chmod, _wchmod
_fstat, _fstat32, _fstat64, _fstati64, _fstat32i64, _fstat64i32
_open, _wopen
_stat_wstat 関数