_sopen_s、_wsopen_s
ファイルを共有用に開きます。 _sopen と _wsopen には、「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,
);
パラメーター
[出力] pfh
ファイル ハンドル。エラーが発生した場合は -1。[入力] filename
ファイル名。[入力] oflag
許可される操作の種類。[入力] shflag
可能な共有の種類。[入力] pmode
権限の設定。
戻り値
エラーが発生すると 0 以外の値を返し、グローバル変数 errno に次のいずれかの値が設定されます。
EACCES
指定されたパスがディレクトリであるか、または読み取り専用のファイルを書き込み操作用に開こうとしました。EEXIST
_O_CREAT フラグと _O_EXCL フラグが指定されましたが、filename は既に存在します。EINVAL
無効な oflag、shflag、pmode 引数、あるいは pfh または filename が null ポインターでした。EMFILE
使用できるファイル記述子がありません。ENOENT
ファイル名またはパス名が見つかりません。
この関数に無効なパラメーターが渡されると、「パラメーターの検証」に説明されているように、無効なパラメーター ハンドラーが呼び出されます。 実行の継続が許可された場合、errno が EINVAL に設定され、EINVAL が返されます。
リターン コードの詳細については、「_doserrno、errno、_sys_errlist、および _sys_nerr」を参照してください。
エラーが発生した場合は、pfh 経由で -1 が返されます (pfh が null ポインターではない場合)。
解説
_sopen_s 関数は、filename で指定されたファイルを開き、oflag および shflag で定義されているように、そのファイルを共有読み取りまたは共有書き込み用に準備します。 _wsopen_s 関数は、_sopen_s 関数のワイド文字バージョンです。_wsopen_s 関数の引数 filename は、ワイド文字列です。 それ以外では、_wsopen_s と _sopen_s の動作は同じです。
汎用テキスト ルーチンのマップ
Tchar.h のルーチン |
_UNICODE および _MBCS が未定義の場合 |
_MBCS が定義されている場合 |
_UNICODE が定義されている場合 |
---|---|---|---|
_tsopen_s |
_sopen_s |
_sopen_s |
_wsopen_s |
oflag は、Fcntl.h ファイルで定義されている 1 つ以上のマニフェスト定数を組み合わせて構成される整数式です。 oflag 引数が複数の定数で構成されている場合は、ビットごとの OR 演算子 ( | ).
_O_APPEND
書き込み操作が行われるたびに、事前にファイル ポインターをファイルの終端に移動します。_O_BINARY
ファイルをバイナリ (無変換) モードで開きます。 バイナリ モードの詳細については、「fopen、_wfopen」を参照してください。_O_CREAT
書き込み用の新規ファイルを作成して開きます。 filename で指定したファイルが存在する場合は無効です。_O_CREAT| _O_SHORT_LIVED
ファイルを一時ファイルとして作成し、可能な場合はディスクにフラッシュしません。_O_CREAT| _O_TEMPORARY
ファイルを一時ファイルとして作成します。最後のファイル記述子が閉じられると、ファイルは削除されます。_O_CREAT| _O_EXCL
filename で指定されたファイルが存在する場合は、エラー値を返します。 _O_CREAT と共に使用する場合にだけ適用されます。_O_NOINHERIT
共有ファイル記述子の作成を禁止します。_O_RANDOM
主にディスクからのランダム アクセスを指定します。_O_RDONLY
ファイルを読み取り専用で開きます。_O_RDWR または _O_WRONLY を指定した場合、この定数は使用できません。_O_RDWR
ファイルを読み取りと書き込みの両用で開きます。_O_RDONLY または _O_WRONLY を指定した場合、この定数は使用できません。_O_SEQUENTIAL
主にディスクからの順次アクセスを指定します。_O_TEXT
ファイルをテキスト (変換) モードで開きます。 詳細については、「テキスト モードとバイナリ モードのファイル入出力」および「fopen」を参照してください。_O_TRUNC
ファイルを開き、長さ 0 まで切り捨てます。ファイルには書き込み許可が必要です。 このフラグは、_O_RDONLY と共に指定できません。 _O_CREAT と共に _O_TRUNC を使用すると、既存のファイルが開かれるか、新しいファイルが作成されます。注意
_O_TRUNC フラグを設定すると、指定したファイルの内容が破棄されます。
_O_WRONLY
ファイルを書き込み専用で開きます。_O_RDONLY または _O_RDWR を指定した場合、この定数は使用できません。_O_U16TEXT
ファイルを Unicode UTF-16 モードで開きます。_O_U8TEXT
ファイルを Unicode UTF-8 モードで開きます。_O_WTEXT
ファイルを Unicode モードで開きます。
ファイル アクセス モードを指定するには、_O_RDONLY、_O_RDWR、または _O_WRONLY のいずれかを指定する必要があります。 アクセス モードの既定値はありません。
_O_WRONLY|_O_APPEND (追加モード) に _O_WTEXT、_O_U16TEXT、_O_U8TEXT のいずれかを組み合わせて指定した場合、_sopen_s は、まず、対象のファイルを読み取りおよび書き込みモードで開き、BOM を読み取ってから、書き込み専用モードで開き直します。 読み取りおよび書き込みモードでファイルを開くことができなかった場合は、書き込み専用でファイルを開き、Unicode モード設定の既定値を使用します。
shflag 引数は、Share.h で定義されている次のマニフェスト定数のうちの 1 つで構成される定数式です。
_SH_DENYRW
ファイルの読み取りと書き込みを禁止します。_SH_DENYWR
ファイルの書き込みを禁止します。_SH_DENYRD
ファイルの読み取りを禁止します。_SH_DENYNO
読み出しアクセスおよび書き込みアクセスを許可します。
pmode 引数は、_sopen の場合とは異なり、必ず指定する必要があります。 _O_CREAT を指定する場合にファイルがないときは、pmode でファイルのアクセス許可を指定します。このアクセス許可は、初めて新規ファイルを閉じるときに設定されます。 それ以外の場合、pmode は無視されます。 pmode は、SYS\Stat.h で定義されている _S_IWRITE マニフェスト定数および _S_IREAD マニフェスト定数の一方または両方を含む整数式です。 両方の定数を指定する場合は、ビットごとの OR 演算子で結合します。 pmode の意味は、次のとおりです。
_S_IWRITE
書き込み許可。_S_IREAD
読み取り許可。_S_IREAD | _S_IWRITE
ファイルの読み取りおよび書き込みを許可します。
書き込み許可属性を指定しないと、ファイルは読み取り専用になります。 Windows オペレーティング システムでは、すべてのファイルが読み取り可能です。書き込み専用のアクセス許可を与えることはできません。 したがって、_S_IWRITE モードと _S_IREAD | _S_IWRITE モードは等価です。
_sopen_s は、アクセス許可を設定する前に、現在のファイルのアクセス許可マスクを pmode に適用します。「_umask」を参照してください。
必要条件
ルーチン |
必須ヘッダー |
オプション ヘッダー |
---|---|---|
_sopen_s |
<io.h> |
<fcntl.h>、<sys/types.h>、<sys/stat.h>、<share.h> |
_wsopen_s |
<io.h> または <wchar.h> |
<fcntl.h>、<sys/types.h>、<sys/stat.h>、<share.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
「_locking」の例を参照してください。