_open、_wopen
更新 : 2007 年 11 月
ファイルを開きます。セキュリティが強化されたバージョンが使用可能になったので、これらの関数は使用されなくなりました。「_sopen_s、_wsopen_s」を参照してください。
int _open(
const char *filename,
int oflag [,
int pmode]
);
int _wopen(
const wchar_t *filename,
int oflag [,
int pmode]
);
パラメータ
filename
ファイル名。oflag
許可される操作の種類。pmode
アクセス権。
戻り値
これらの関数は、開いたファイルのファイル記述子を返します。エラーが発生すると -1 を返し、グローバル変数 errno に次のいずれかの値が設定されます。
EACCES
書き込みのために読み取り専用ファイルを開こうとしたか、指定した操作がファイルの共有モードで許可されていないか、または指定したパスがディレクトリです。EEXIST
_O_CREAT フラグと _O_EXCL フラグを指定しましたが、filename は既に存在します。EINVAL
引数 oflag または pmode が無効です。EMFILE
利用できるファイル記述子がありません。開いているファイルが多すぎます。ENOENT
ファイル名またはパス名が見つかりません。
リターン コードの詳細については、「_doserrno、errno、_sys_errlist、および _sys_nerr」を参照してください。
解説
_open 関数は、filename で指定されたファイルを開き、oflag で定義されているように、そのファイルを読み取りまたは書き込み用に準備します。ワイド文字を扱う場合は、_open ではなく _wopen を使用します。_wopen の場合、filename 引数にはワイド文字列を指定します。引数の指定以外では、_wopen と _open の動作は同じです。
汎用テキスト ルーチンのマップ
Tchar.h のルーチン |
_UNICODE および _MBCS が未定義の場合 |
_MBCS が定義されている場合 |
_UNICODE が定義されている場合 |
---|---|---|---|
_topen |
_open |
_open |
_wopen |
oflag は、次で示す 1 つ以上のマニフェスト定数、または Fcntl.h で定義された定数の組み合わせで構成された整数式です。
_O_APPEND
すべての書き込み操作の前に、ファイル ポインタをファイルの終端に移動します。_O_BINARY
ファイルをバイナリ (無変換) モードで開きます。バイナリ モードの詳細については、「fopen、_wfopen」を参照してください。_O_CREAT
書き込み用の新規ファイルを作成して開きます。filename で指定したファイルが既に存在する場合、新規ファイルは作成されません。_O_CREAT を指定するときは、引数 pmode が必要です。_O_CREAT| _O_SHORT_LIVED
ファイルを一時ファイルとして作成し、可能な場合はディスクにフラッシュしません。_O_CREAT を指定するときは、引数 pmode が必要です。_O_CREAT| _O_TEMPORARY
ファイルを一時ファイルとして作成します。最後のファイル記述子を閉じると、ファイルは削除されます。_O_CREAT を指定するときは、引数 pmode が必要です。_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 モードで開きます。このオプションは、Visual C++ 2005 で使用できます。_O_U8TEXT
ファイルを Unicode UTF-8 モードで開きます。このオプションは、Visual C++ 2005 で使用できます。_O_WTEXT
ファイルを Unicode モードで開きます。このオプションは、Visual C++ 2005 で使用できます。
ファイル アクセス モードを指定するには、_O_RDONLY、_O_RDWR、または _O_WRONLY のいずれかを指定する必要があります。アクセス モードの既定値はありません。
_O_WTEXT を使用してファイルを読み取り用で開くと、_open はファイルの先頭を読み出し、バイト順マーク (BOM) をチェックします。BOM がある場合、ファイルは BOM に基づいて UTF-8 または UTF-16LE として処理されます。BOM がない場合、ファイルは ANSI として処理されます。_O_WTEXT を使用してファイルを書き込み用に開くと、UTF-16 が使用されます。以前の設定や BOM に関係なく、_O_UTF8 を使用するとファイルは常に UTF-8 として開かれ、_O_UTF16 を使用するとファイルは常に UTF-16 として開かれます。
_O_WRONLY|_O_APPEND (追加モード) に _O_WTEXT、_O_U16TEXT、_O_U8TEXT のいずれかを組み合わせて指定した場合、_open は、まず、対象のファイルを読み取りおよび書き込みモードで開き、BOM を読み取ってから、書き込み専用モードで開き直します。読み取りおよび書き込みモードでファイルを開くことができなかった場合は、書き込み専用でファイルを開き、Unicode モード設定の既定値を使用します。
oflag に 2 つ以上のマニフェスト定数を指定する場合は、ビットごとの OR 演算子 (|) で結合します。バイナリ モードとテキスト モードについては、「テキスト モードとバイナリ モードのファイル入出力」を参照してください。
引数 pmode は、_O_CREAT を指定する場合にだけ必要です。ファイルが既に存在する場合、pmode は無視されます。それ以外の場合、pmode はファイル アクセス許可を設定します。この設定は、新しいファイルを初めて閉じるときに行われます。_open は、アクセス許可を設定する前に、現在のファイルのアクセス許可のマスクを pmode に適用します (詳細については _umask を参照)。pmode は、SYS\Stat.h で定義されている次のマニフェスト定数の 1 つまたは両方を含む整数式です。
_S_IREAD
ファイルを読み取り専用に設定します。_S_IWRITE
ファイルへの書き込みを許可します。つまり、ファイルを読み取ることもできます_S_IREAD | _S_IWRITE
ファイルの読み取りおよび書き込みを許可します。
両方の定数を指定する場合は、ビットごとの OR 演算子 (|) で結合します。Windows NT では、すべてのファイルを読み取ることができるため、書き込み専用のアクセス許可は無効です。したがって、_S_IWRITE モードと _S_IREAD | _S_IWRITE モードは同じです。
上記以外の値を pmode に指定する場合 (別のオペレーティング システムで有効な pmode を指定する場合も含めて)、または許可されている oflag 値以外の値を指定する場合、この関数は Debug モードでアサーションを生成し、「パラメータの検証」で説明されているように、無効なパラメータ ハンドラを呼び出します。実行の継続が許可された場合、関数は -1 を返し、errno を EINVAL に設定します。
必要条件
ルーチン |
必須ヘッダー |
オプション ヘッダー |
---|---|---|
_open |
<io.h> |
<fcntl.h>、<sys/types.h>、<sys/stat.h> |
_wopen |
<io.h> または <wchar.h> |
<fcntl.h>、<sys/types.h>、<sys/stat.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
ライブラリ
C ランタイム ライブラリのすべてのバージョン。
使用例
// crt_open.c
// compile with: /W3
/* This program uses _open to open a file
* named CRT_OPEN.C for input and a file named CRT_OPEN.OUT
* for output. The files are then closed.
*/
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <io.h>
#include <stdio.h>
int main( void )
{
int fh1, fh2;
fh1 = _open( "CRT_OPEN.C", _O_RDONLY ); // C4996
// Note: _open is deprecated; consider using _sopen_s instead
if( fh1 == -1 )
perror( "Open failed on input file" );
else
{
printf( "Open succeeded on input file\n" );
_close( fh1 );
}
fh2 = _open( "CRT_OPEN.OUT", _O_WRONLY | _O_CREAT, _S_IREAD |
_S_IWRITE ); // C4996
if( fh2 == -1 )
perror( "Open failed on output file" );
else
{
printf( "Open succeeded on output file\n" );
_close( fh2 );
}
}
出力
Open succeeded on input file
Open succeeded on output file