_sopen, _wsopen

共有用にファイルを開きます。 これらの関数のより安全なバージョンを利用できます。_sopen_s_wsopen_s

構文

int _sopen(
   const char *filename,
   int oflag,
   int shflag [,
   int pmode ]
);
int _wsopen(
   const wchar_t *filename,
   int oflag,
   int shflag [,
   int pmode ]
);

パラメーター

filename
ファイル名。

oflag
許可される操作の種類。

shflag
許可される共有の種類。

pmode
アクセス許可の設定。

戻り値

これらの各関数は、開かれたファイルのファイル記述子を返します。

ポインターの場合filenameoflagまたは有効なNULL値の範囲内にない場合oflagshflagは、「パラメーターの検証」で説明されているように、無効なパラメーター ハンドラーが呼び出されます。 実行の継続が許可された場合、これらの関数は -1 を返し、errno を次のいずれかの値に設定します。

errno 状態
EACCES 指定されたパスがディレクトリであるか、またはファイルが読み取り専用ですが、書き込み用に開く操作が試行されました。
EEXIST _O_CREAT および _O_EXCL フラグが指定されましたが、filename が既に存在します。
EINVAL oflag または shflag 引数が無効です。
EMFILE ファイル記述子をこれ以上使用できません。
ENOENT ファイルまたはパスが見つかりません。

これらのリターン コードとその他のリターン コードについては、「errno_doserrno_sys_errlist_sys_nerr」を参照してください。

解説

_sopen 関数は、filename で指定されたファイルを開き、oflag および shflag による定義に従って、共有読み取りまたは書き込み用にファイルを準備します。 _wsopen 関数は、 _sopen関数のワイド文字バージョンです。 filename 関数の引数 _wsopen は、ワイド文字列です。 それ以外では、_wsopen_sopen の動作は同じです。

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

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

Tchar.h ルーチン _UNICODE_MBCS が定義されていない _MBCS が定義されている _UNICODE が定義されている
_tsopen _sopen _sopen _wsopen

整数式 oflag は、次に定義 <fcntl.h>されている 1 つ以上のマニフェスト定数を組み合わせることによって形成されます。 2 つ以上の定数が引数 oflagを形成すると、ビットごとの OR 演算子 ( | ) と組み合わされます。

oflag 定数 動作
_O_APPEND 書き込み操作の前に、毎回、ファイル ポインターをファイルの末尾に移動します。
_O_BINARY ファイルをバイナリ (無変換) モードで開きます。 (バイナリ モードの詳細については、「fopen」を参照してください。)
_O_CREAT ファイルを作成し、書き込み用に開きます。 filename で指定されたファイルが存在する場合は無効です。 pmode が指定された場合は _O_CREAT 引数が必要です。
_O_CREAT | _O_SHORT_LIVED ファイルを一時的なものとして作成し、可能であればディスクにフラッシュしません。 pmode が指定された場合は _O_CREAT 引数が必要です。
_O_CREAT | _O_TEMPORARY ファイルを一時ファイルとして作成します。最後のファイル記述子が閉じられると、ファイルは削除されます。 pmode が指定された場合は _O_CREAT 引数が必要です。 アプリの互換性のために従来の動作を維持するために、他のプロセスがこのファイルを削除できないようにすることはできません。
_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 ファイルをテキスト (変換) モードで開きます。 (詳細については、 テキストおよびバイナリ モード のファイル I/O および fopen.)
_O_TRUNC ファイルを開き、長さゼロに切り詰めます。ファイルに書き込みアクセス許可が必要です。 で指定 _O_RDONLYすることはできません。 _O_TRUNC_O_CREAT と共に使用すると、既存のファイルが開かれるか、新しいファイルが作成されます。 注:_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_WTEXT_O_U8TEXT、または _O_U16TEXT を使用してファイルが Unicode モードで開かれると、Input 関数によって、ファイルから読み取られたデータは wchar_t 型として格納された UTF-16 データに変換されます。 Unicode モードで開かれたファイルに書き込む関数は、 wchar_t型として格納された UTF-16 データがバッファーに含まれていると想定します。 ファイルが UTF-8 としてエンコードされている場合、UTF-16 データは書き込み時に UTF-8 に変換されます。 ファイルの UTF-8 でエンコードされたコンテンツは、読み取り時に UTF-16 に変換されます。 Unicode モードで奇数バイトの読み取りまたは書き込みを試みると、 パラメーター検証 エラーが発生します。 UTF-8 としてプログラムに格納されたデータを読み取るか書き込む場合は、Unicode モードではなくテキストまたはバイナリ ファイル モードを使用します。 必要なエンコード翻訳は、お客様の責任で行います。

_sopen では、_O_WRONLY | _O_APPEND (追加モード) および _O_WTEXT_O_U16TEXT、または _O_U8TEXT を使用して呼び出された場合、最初に読み取りおよび書き込み用にファイルを開き、BOM を読み取り、次に書き込み専用で再度開こうとします。 読み取りおよび書き込み用にファイルを開くのに失敗した場合、書き込み専用でファイルを開き、Unicode モード設定の既定値を使用します。

引数 shflag は、次のいずれかのマニフェスト定数で構成される定数式です。これは次で <share.h>定義されています。

shflag 定数 動作
_SH_DENYRW ファイルへの読み取りおよび書き込みアクセスを拒否します。
_SH_DENYWR ファイルへの書き込みアクセスを拒否します。
_SH_DENYRD ファイルへの読み取りアクセスを拒否します。
_SH_DENYNO 読み取りおよび書き込みアクセスを許可します。

pmode が指定された場合にのみ _O_CREAT 引数が必要です。 ファイルが存在しない場合は、 pmode 新しいファイルを初めて閉じるときに設定されるファイルのアクセス許可の設定を指定します。 それ以外の場合は、pmode は無視されます。 pmode は、<sys\stat.h> で定義されているマニフェスト定数 _S_IWRITE_S_IREAD のいずれか、または両方が含まれた整数式です。 両方の定数を指定すると、ビットごとの OR 演算子と組み合わされます。 pmode の意味は次のとおりです。

pmode 意味
_S_IREAD 読み取りのみが許可されます。
_S_IWRITE 書き込みが許可されます。 (実際には、読み取りと書き込みが許可されます)。
_S_IREAD | _S_IWRITE 読み取りと書き込みが許可されます。

書き込みアクセス許可が与えられていない場合、ファイルは読み取り専用です。 Windows オペレーティング システムでは、すべてのファイルが読み取り可能です。書き込み専用のアクセス許可を付与することはできません。 したがって、_S_IWRITE モードと _S_IREAD | _S_IWRITE モードは等価です。

_sopen では、アクセス許可が設定される前に、現在のファイル アクセス許可マスクが pmode に適用されます。 詳細については、_umaskを参照してください。

必要条件

機能 必須ヘッダー オプション ヘッダー
_sopen <io.h> <fcntl.h>, <sys\types.h>, <sys\stat.h>, <share.h>
_wsopen <io.h> または <wchar.h> <fcntl.h>, <sys\types.h>, <sys\stat.h>, <share.h>

互換性の詳細については、「 Compatibility」を参照してください。

_locking の例を参照してください。

関連項目

低レベル I/O
_close
_creat, _wcreat
fopen, _wfopen
_fsopen, _wfsopen
_open, _wopen