次の方法で共有


_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 を使用すると、既存のファイルが開かれるか、新しいファイルが作成されます。

    z0kc8e3z.alert_note(ja-jp,VS.90).gifメモ :

    _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 を返し、errnoEINVAL に設定します。

必要条件

ルーチン

必須ヘッダー

オプション ヘッダー

_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

.NET Framework の相当するアイテム

参照

参照

下位入出力

_chmod、_wchmod

_close

_creat、_wcreat

_dup、_dup2

fopen、_wfopen

_sopen、_wsopen