_rtl_read
io.h:インデックス への移動
ヘッダーファイル
io.h
カテゴリ
入出力ルーチン
プロトタイプ
int _rtl_read(int handle, void *buf, unsigned len);
説明
ファイルを読み取ります。
メモ: _read は使用されなくなり,この関数に置き換えられました。
この関数は,handle に関連付けられたファイルから len バイトを読み取り,それを buf が指すバッファに格納します。ファイルがテキストモードで開かれている場合,_rtl_read は復帰を削除しません。
引数 handle は,creat,open,dup,または dup2 の呼び出しによって取得されるファイルハンドルです。
ディスクファイルの場合,_rtl_read は,現在のファイルポインタの位置から読み取りを開始します。読み取りが完了すると,読み取ったバイト数だけファイルポインタをインクリメントします。デバイスの場合は,直接デバイスからバイトを読み取ります。
読み取ることができる最大バイト数は,UINT_MAX -1 です。これは,UINT_MAX が -1 に等しく,-1 がエラーを示す戻り値だからです。UINT_MAX は,limits.h で定義されています。
戻り値
成功した場合,_rtl_read は次のいずれかの値を返します。
- 正の整数(バッファに格納されたバイト数を示す)
- 0(ファイルの終わりを示す)
エラーが発生した場合は -1 を返し,グローバル変数 errno に次のいずれかの値を設定します。
EACCES |
アクセスが許可されない |
EBADF |
不正なファイル番号 |
例
#include <stdio.h>
#include <io.h>
#include <alloc.h>
#include <fcntl.h>
#include <process.h>
#include <sys\stat.h>
int main(void)
{
void *buf;
int handle, bytes;
buf = malloc(10);
/*
現在のディレクトリから TEST.$$$ という名前のファイルを探し,そこから 10 バイトを読み取ります。この例を使用するには,ファイル TEST.$$$ を作成する必要があります
*/
if ((handle =
open("TEST.$$$", O_RDONLY | O_BINARY, S_IWRITE | S_IREAD)) == -1)
{
printf("Error Opening File\n");
exit(1);
}
if ((bytes = _rtl_read(handle, buf, 10)) == -1) {
printf("Read Failed.\n");
exit(1);
}
else {
printf("_rtl_read: %d bytes read.\n", bytes);
}
return 0;
}
移植性
POSIX | Win32 | ANSI C | ANSI C++ |
---|---|---|---|
+ |