_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
アクセス許可の設定。
戻り値
これらの各関数は、開かれたファイルのファイル記述子を返します。
filename
またはoflag
がNULL
ポインターである場合、またはoflag
またはshflag
が有効な値の範囲内にない場合は、「パラメーター検証で説明されているように、無効なパラメーター ハンドラーが呼び出されます。 実行の継続が許可された場合、これらの関数は -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 つ以上を組み合わせることによって形成されます。 引数 oflag
を形成する定数が複数ある場合、ビットごとの OR 演算子 ( |
) と組み合わされます。
oflag 定数 |
Behavior |
---|---|
_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 |
ANSI テキスト (翻訳済み) モードでファイルを開きます。 (詳細については、 を参照してください。テキスト モードとバイナリ モード のファイル 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 定数 |
Behavior |
---|---|
_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