_rtl_open, _wrtl_open
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 のみ |