_rtl_open, _wrtl_open

提供: RAD Studio
移動先: 案内検索

io.h:インデックス への移動


ヘッダーファイル

io.h

カテゴリ

入出力ルーチン

プロトタイプ

int _rtl_open(const char *filename, int oflags);

int _wrtl_open(const wchar_t *path, int oflags);

説明

読み取りまたは書き込みを行うためにファイルを開きます。

メモ: _open は使用されなくなり,この _rtl_open 関数に置き換えられました。

_rtl_open は,filename で指定されたファイルを開き,oflags の値で指定された読み取りまたは書き込みの準備を行います。このファイルは,常にバイナリモードで開かれます。

oflags では,次の 2 つのリストにあるフラグを使用します。最初のリストからは,フラグを 1 つ(だけ)使用する必要があります。2 番めのリストのフラグは,任意の組み合わせを使用できます。

O_RDONLY

読み出し専用で開きます。

O_WRONLY

書き込み専用で開きます。

O_RDWR

読み書き用に開きます。



以下の値は,(OR 演算子を使用して)oflags に追加できます。

O_NOINHERIT

ファイルは子プロセスに渡されません。

SH_COMPAT

ほかにも SH_COMPAT 付きで開くことを許可します。SH_COMPAT フラグ付きのファイルをほかにも開く場合は,SH_COMPAT フラグを使用する必要があります。ほかのフラグを SH_COMPAT と論理 OR で組み合わせてファイルを開くことを要求できます。たとえば,「SH_COMPAT | SH_DENYWR」を使用できます。ファイルがすでにほかの共有モードで開かれている場合,この呼び出しは失敗します。

SH_DENYRW

現在のハンドルだけがファイルにアクセスできます。

SH_DENYWR

このファイルをほかにも開く場合は,読み取りだけを許可します。

SH_DENYRD

このファイルをほかにも開く場合は,書き込みだけを許可します。

SH_DENYNO

このファイルをほかにも共有して開くことを許可しますが,SH_COMPAT で開くことはできません。



メモ: これらのシンボル定数は,fcntl.h と share.h で定義されています。

1 つの _rtl_open ルーチンでは,SH_DENYxx 値を 1 つだけ指定できます。これらのファイル共有属性は,ファイルに対して行われるロックに追加されます。

同時に開くことができるファイルの最大数は,HANDLE_MAX によって定義されます。

戻り値

成功した場合,:_rtl_open は,負でない整数(ファイルハンドル)を返します。(ファイル内の現在の位置を指定する)ファイルポインタは,ファイルの先頭に設定されます。

エラーが発生した場合は -1 を返し,グローバル変数 errno に次のいずれかの値を設定します。

EACCES

アクセスが許可されない

EINVACC

無効なアクセスコード

EMFILE

オープンファイルが多すぎる

ENOENT

パスまたはファイルが見つからない



#include <string.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
int main(void)
{
   int handle;
   char msg[] = "Hello world";
   if ((handle = _rtl_open("TEST.$$$", O_RDWR)) == -1)
   {
      perror("Error:");
      return 1;
   }
   _rtl_write(handle, msg, strlen(msg));
   _rtl_close(handle);
   return 0;
}

移植性

POSIX Win32 ANSI C ANSI C++

_rtl_open

+

_wrtl_open

NT のみ