_sopen_s、_wsopen_s_sopen_s, _wsopen_s

共有用にファイルを開きます。Opens a file for sharing. これらの _sopen および _wsopen のバージョンは、「CRT のセキュリティ機能」で説明されているように、セキュリティが強化されています。These versions of _sopen and _wsopen have security enhancements, as described in Security Features in the CRT.


errno_t _sopen_s(
   int* pfh,
   const char *filename,
   int oflag,
   int shflag,
   int pmode
errno_t _wsopen_s(
   int* pfh,
   const wchar_t *filename,
   int oflag,
   int shflag,
   int pmode,


ファイル ハンドル。エラーの場合は -1 です。The file handle, or -1 in the case of an error.

ファイル名。File name.

許可される操作の種類。The kind of operations allowed.

許可される共有の種類。The kind of sharing allowed.

アクセス許可の設定。Permission setting.

戻り値Return Value

0以外の戻り値はエラーを示します。その場合、 errnoは次のいずれかの値に設定されます。A nonzero return value indicates an error; in that case errno is set to one of the following values.

errno の値errno value 条件Condition
EACCESEACCES 指定されたパスがディレクトリであるか、またはファイルが読み取り専用ですが、書き込み用に開く操作が試行されました。The given path is a directory, or the file is read-only, but an open-for-writing operation was attempted.
EEXISTEEXIST _O_CREAT_O_EXCLフラグが指定されましたが、 filenameは既に存在します。_O_CREAT and _O_EXCL flags were specified, but filename already exists.
EINVALEINVAL 無効なoflagshflag、またはpmode引数、またはpfhまたはfilenameが null ポインターでした。Invalid oflag, shflag, or pmode argument, or pfh or filename was a null pointer.
EMFILEEMFILE ファイル記述子をこれ以上使用できません。No more file descriptors available.
ENOENTENOENT ファイルまたはパスが見つかりません。File or path not found.

無効な引数が関数に渡された場合は、「パラメーターの検証」で説明されているように、無効なパラメーター ハンドラーが呼び出されます。If an invalid argument is passed to the function, the invalid parameter handler is invoked, as described in Parameter Validation. 実行の継続が許可された場合、 errnoeinvalに設定され、 einvalが返されます。If execution is allowed to continue, errno is set to EINVAL and EINVAL is returned.

これらのリターン コードとその他のリターン コードの詳細については、「errno、_doserrno、_sys_errlist、および _sys_nerr」を参照してください。For more information about these and other return codes, see errno, _doserrno, _sys_errlist, and _sys_nerr.

エラーが発生した場合、-1 はpfhを通じて返されます ( pfhが null ポインターの場合を除く)。In the case of an error, -1 is returned through pfh (unless pfh is a null pointer).


_Sopen_s関数は、 filenameで指定されたファイルを開き、 oflagおよびshflagで定義されている共有の読み取りまたは書き込み用にファイルを準備します。The _sopen_s function opens the file specified by filename and prepares the file for shared reading or writing, as defined by oflag and shflag. _wsopen_s_sopen_sのワイド文字バージョンです。_wsopen_sするfilename引数は、ワイド文字列です。_wsopen_s is a wide-character version of _sopen_s; the filename argument to _wsopen_s is a wide-character string. _wsopen_s_sopen_sは同じように動作します。_wsopen_s and _sopen_s behave identically otherwise.

既定では、この関数のグローバル状態はアプリケーションにスコープが設定されています。By default, this function's global state is scoped to the application. これを変更するには、「 CRT でのグローバル状態」を参照してください。To change this, see Global state in the CRT.

汎用テキスト ルーチンのマップGeneric-Text Routine Mappings

Tchar.h のルーチンTchar.h routine _UNICODE および _MBCS が未定義の場合_UNICODE and _MBCS not defined _MBCS が定義されている場合_MBCS defined _UNICODE が定義されている場合_UNICODE defined
_tsopen_s_tsopen_s _sopen_s_sopen_s _sopen_s_sopen_s _wsopen_s_wsopen_s

整数式 oflag は、 oflag> で<定義されている1つ以上のマニフェスト定数を組み合わせることによって形成されます。The integer expression oflag is formed by combining one or more manifest constants, which are defined in <fcntl.h>. 2つ以上の定数が引数oflagを形成する場合、それらはビットごとの or 演算子 ( | ) と組み合わされます。When two or more constants form the argument oflag, they are combined with the bitwise-OR operator ( | ).

oflag定数oflag constant 動作Behavior
_O_APPEND_O_APPEND 書き込み操作の前に、毎回、ファイル ポインターをファイルの末尾に移動します。Moves the file pointer to the end of the file before every write operation.
_O_BINARY_O_BINARY ファイルをバイナリ (無変換) モードで開きます。Opens the file in binary (untranslated) mode. (バイナリ モードの詳細については、「fopen」を参照してください)。(See fopen for a description of binary mode.)
_O_CREAT_O_CREAT ファイルを作成し、書き込み用に開きます。Creates a file and opens it for writing. Filenameによって指定されたファイルが存在する場合は効果がありません。Has no effect if the file specified by filename exists. _O_CREATが指定されている場合は、 pmode引数が必要です。The pmode argument is required when _O_CREAT is specified.
_O_CREAT | _O_SHORT_LIVED_O_CREAT | _O_SHORT_LIVED ファイルを一時ファイルとして作成し、可能な場合は、ディスクにフラッシュしません。Creates a file as temporary and if possible does not flush to disk. _O_CREATが指定されている場合は、 pmode引数が必要です。The pmode argument is required when _O_CREAT is specified.
_O_CREAT | _O_TEMPORARY_O_CREAT | _O_TEMPORARY ファイルを一時ファイルとして作成します。最後のファイル記述子が閉じられると、ファイルは削除されます。Creates a file as temporary; the file is deleted when the last file descriptor is closed. _O_CREATが指定されている場合は、 pmode引数が必要です。The pmode argument is required when _O_CREAT is specified.
_O_CREAT |_O_EXCL_O_CREAT | _O_EXCL Filenameによって指定されたファイルが存在する場合、エラー値を返します。Returns an error value if a file specified by filename exists. _O_CREATと共に使用する場合にのみ適用されます。Applies only when used with _O_CREAT.
_O_NOINHERIT_O_NOINHERIT 共有ファイル記述子の作成を禁止します。Prevents creation of a shared file descriptor.
_O_RANDOM_O_RANDOM キャッシュがディスクからのランダム アクセスに最適化されるように指定します。ただし、ランダム アクセスに限定されるわけではありません。Specifies that caching is optimized for, but not restricted to, random access from disk.
_O_RDONLY_O_RDONLY 読み取り専用でファイルを開きます。Opens a file for reading only. _O_RDWRまたは _O_WRONLYと共に指定することはできません。Cannot be specified with _O_RDWR or _O_WRONLY.
_O_RDWR_O_RDWR 読み取りと書き込みの両方用にファイルを開きます。Opens a file for both reading and writing. _O_RDONLYまたは _O_WRONLYと共に指定することはできません。Cannot be specified with _O_RDONLY or _O_WRONLY.
_O_SEQUENTIAL_O_SEQUENTIAL キャッシュがディスクからのシーケンシャル アクセスに最適化されるように指定します。ただし、シーケンシャル アクセスに限定されるわけではありません。Specifies that caching is optimized for, but not restricted to, sequential access from disk.
_O_TEXT_O_TEXT ファイルをテキスト (変換) モードで開きます。Opens a file in text (translated) mode. (詳細については、「テキスト モードとバイナリ モードのファイル入出力」および「fopen」を参照してください。)(For more information, see Text and Binary Mode File I/O and fopen.)
_O_TRUNC_O_TRUNC ファイルを開き、長さゼロに切り詰めます。ファイルに書き込みアクセス許可が必要です。Opens a file and truncates it to zero length; the file must have write permission. _O_RDONLYと共に指定することはできません。Cannot be specified with _O_RDONLY. _O_CREATと共に使用 _O_TRUNC 、既存のファイルを開くか、ファイルを作成します。_O_TRUNC used with _O_CREAT opens an existing file or creates a file. 注:****_O_TRUNCフラグは、指定されたファイルの内容を破棄します。Note: The _O_TRUNC flag destroys the contents of the specified file.
_O_WRONLY_O_WRONLY 書き込み専用でファイルを開きます。Opens a file for writing only. _O_RDONLYまたは _O_RDWRと共に指定することはできません。Cannot be specified with _O_RDONLY or _O_RDWR.
_O_U16TEXT_O_U16TEXT Unicode UTF-16 モードでファイルを開きます。Opens a file in Unicode UTF-16 mode.
_O_U8TEXT_O_U8TEXT Unicode UTF-8 モードでファイルを開きます。Opens a file in Unicode UTF-8 mode.
_O_WTEXT_O_WTEXT Unicode モードでファイルを開きます。Opens a file in Unicode mode.

ファイルアクセスモードを指定するには、 _O_RDONLY_O_RDWR_O_WRONLYのいずれかを指定する必要があります。To specify the file access mode, you must specify either _O_RDONLY, _O_RDWR, or _O_WRONLY. アクセス モードに既定値はありません。There is no default value for the access mode.

_O_WTEXT_O_U8TEXT、または _O_U16TEXTを使用してファイルが Unicode モードで開かれると、入力関数は、ファイルから読み取られたデータを、型wchar_tとして格納された utf-16 データに変換します。When a file is opened in Unicode mode by using _O_WTEXT, _O_U8TEXT, or _O_U16TEXT, input functions translate the data that's read from the file into UTF-16 data stored as type wchar_t. Unicode モードで開かれたファイルに書き込む関数は、型wchar_tとして格納された utf-16 データを含むバッファーを想定します。Functions that write to a file opened in Unicode mode expect buffers that contain UTF-16 data stored as type wchar_t. ファイルが UTF-8 としてエンコードされている場合、UTF-16 データは書き込まれるときに UTF-8 に変換され、ファイルの UTF-8 でエンコードされた内容は読み取られるときに UTF-16 に変換されます。If the file is encoded as UTF-8, then UTF-16 data is translated into UTF-8 when it is written, and the file's UTF-8-encoded content is translated into UTF-16 when it is read. Unicode モードで奇数バイトの読み取りまたは書き込みを試みると、パラメーター検証エラーが発生します。An attempt to read or write an odd number of bytes in Unicode mode causes a parameter validation error. UTF-8 としてプログラムに格納されたデータを読み取るか書き込む場合は、Unicode モードではなくテキストまたはバイナリ ファイル モードを使用します。To read or write data that's stored in your program as UTF-8, use a text or binary file mode instead of a Unicode mode. 必要なエンコード変換は各自が行う必要があります。You are responsible for any required encoding translation.

| _O_WRONL\Y****_O_APPEND (追加モード) と _O_WTEXT_O_U16TEXT、または _O_U8TEXTを使用して _sopen_sが呼び出された場合、まず読み取りと書き込みのためにファイルを開き、BOM を読み取り、書き込み専用で再度開くように試みます。If _sopen_s is called with _O_WRONLY | _O_APPEND (append mode) and _O_WTEXT, _O_U16TEXT, or _O_U8TEXT, it first tries to open the file for reading and writing, read the BOM, then reopen it for writing only. 読み取りおよび書き込み用にファイルを開くのに失敗した場合、書き込み専用でファイルを開き、Unicode モード設定の既定値を使用します。If opening the file for reading and writing fails, it opens the file for writing only and uses the default value for the Unicode mode setting.

引数shflagは、次のマニフェスト定数のいずれかで構成される定数式です。これは<、resource.h> で定義されています。The argument shflag is a constant expression that consists of one of the following manifest constants, which are defined in <share.h>.

shflag定数shflag constant 動作Behavior
_SH_DENYRW_SH_DENYRW ファイルへの読み取りおよび書き込みアクセスを拒否します。Denies read and write access to a file.
_SH_DENYWR_SH_DENYWR ファイルへの書き込みアクセスを拒否します。Denies write access to a file.
_SH_DENYRD_SH_DENYRD ファイルへの読み取りアクセスを拒否します。Denies read access to a file.
_SH_DENYNO_SH_DENYNO 読み取りおよび書き込みアクセスを許可します。Permits read and write access.

_Sopenの場合とは異なり、 pmode引数は常に必須です。The pmode argument is always required, unlike in _sopen. _O_CREATを指定すると、ファイルが存在しない場合は、 ファイルのアクセス許可の設定が指定されます。これは、新しいファイルが最初に閉じられたときに設定されます。When you specify _O_CREAT, if the file does not exist, pmode specifies the file's permission settings, which are set when the new file is closed the first time. それ以外の場合、 pmodeは無視されます。Otherwise, pmode is ignored. pmodeは、 _S_IWRITE_S_IREADのマニフェスト定数の1つまたは両方を含む整数式です。これ<は、> で定義されています。pmode is an integer expression that contains one or both of the manifest constants _S_IWRITE and _S_IREAD, which are defined in <sys\stat.h>. 両方の定数が指定されると、これらはビットごとの OR 演算子を使用して組み合わされます。When both constants are given, they are combined with the bitwise-OR operator. Pmodeの意味は次のとおりです。The meaning of pmode is as follows.

pmodepmode 説明Meaning
_S_IREAD_S_IREAD 読み取りのみが許可されます。Only reading permitted.
_S_IWRITE_S_IWRITE 書き込みが許可されます。Writing permitted. (実際には、読み取りと書き込みが許可されます)。(In effect, permits reading and writing.)
_S_IREAD | _S_IWRITE_S_IREAD | _S_IWRITE 読み取りと書き込みが許可されます。Reading and writing permitted.

書き込みアクセス許可が与えられない場合、ファイルは読み取り専用になります。If write permission is not given, the file is read-only. Windows オペレーティング システムでは、すべてのファイルは読み取り可能です。書き込み専用のアクセス許可を与えることはできません。In the Windows operating system, all files are readable; it is not possible to give write-only permission. そのため、モード _S_IWRITE_S_IREAD | _S_IWRITEは同等です。Therefore, the modes _S_IWRITE and _S_IREAD | _S_IWRITE are equivalent.

_sopen_sは、アクセス許可が設定される前に、現在のファイルアクセス許可マスクをpmodeに適用します。_sopen_s applies the current file-permission mask to pmode before the permissions are set. (「_umask」を参照。)(See _umask.)


ルーチンRoutine 必須ヘッダーRequired header オプション ヘッダーOptional header
_sopen_s_sopen_s <io.h><io.h> <fcntl.h>、<sys\types.h>、<sys\stat.h>、<share.h><fcntl.h>, <sys\types.h>, <sys\stat.h>, <share.h>
_wsopen_s_wsopen_s <io.h> または <wchar.h><io.h> or <wchar.h> <fcntl.h>、<sys/types.h>、<sys/stat.h>、<share.h><fcntl.h>, <sys/types.h>, <sys/stat.h>, <share.h>

_sopen_s_wsopen_sは Microsoft の拡張機能です。_sopen_s and _wsopen_s are Microsoft extensions. 互換性について詳しくは、「 Compatibility」をご覧ください。For more compatibility information, see Compatibility.


_locking」の例をご覧ください。See the example for _locking.

関連項目See also

下位入出力Low-Level I/O
_creat、_wcreat_creat, _wcreat
fopen、_wfopenfopen, _wfopen
_fsopen、_wfsopen_fsopen, _wfsopen
_open、_wopen_open, _wopen