_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引数、または発生または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. 続けるには、実行が許可された場合errnoに設定されているEINVALEINVALが返されます。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 が返されます発生(しない限り、発生null ポインター)。In the case of an error, -1 is returned through pfh (unless pfh is a null pointer).


_Sopen_s関数で指定されたファイルが開きますfilenameで定義されている、共有の読み取りまたは書き込みのファイルを準備およびoflagshflag.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_sfilenameへの引数 _wsopen_sはワイド文字列です。_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.

汎用テキスト ルーチンのマップ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 1 つまたは複数のマニフェスト定数で定義されているを組み合わせることによって構成が<fcntl.h >。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. Pmode引数が必要なときに _O_CREATを指定します。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. Pmode引数が必要なときに _O_CREATを指定します。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. Pmode引数が必要なときに _O_CREATを指定します。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_TRUNC併用 _O_CREAT既存のファイルを開くか、ファイルを作成します。_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.

使用して Unicode モードでファイルが開かれたときに _O_WTEXT_O_U8TEXT、または _O_U16TEXT、input 関数は、utf-16 データに、ファイルから読み取られるデータを変換します。型として格納されているwchar_tします。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 モードで開かれたファイルに書き込む関数は、型として格納された utf-16 データを含んでいるバッファーを想定wchar_tします。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.

場合 _sopen_sを使用して呼び出した _O_WRONLY | _O_APPEND (追加モード) と _O_WTEXT_O_U16TEXT、または _O_U8TEXT、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で定義されている次のマニフェスト定数のいずれかで構成される定数式は、 <share.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.

Pmode引数が常に必要なとは異なり _sopenします。The pmode argument is always required, unlike in _sopen. 指定すると _O_CREATファイルが存在しない場合、 pmode新しいファイルには、最初の時間が閉じられたときに設定されているファイルのアクセス許可の設定を指定します。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で定義されている<sys \stat.h >。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. 互換性の詳細については、「 互換性」を参照してください。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