_rtl_write
io.h:インデックス への移動
ヘッダーファイル
io.h
カテゴリ
入出力ルーチン
プロトタイプ
int _rtl_write(int handle, void *buf, unsigned len);
説明
ファイルに書き込みます。
メモ: _write は使用されなくなり,この関数に置き換えられました。
_rtl_write は,buf が指すバッファから handle に関連付けられたファイルに len バイトを書き込みます。
_rtl_write が書き込むことができる最大バイト数は,UINT_MAX -1 です。これは,UINT_MAX が -1 に等しく,-1 が _rtl_write のエラーを示す戻り値だからです。UINT_MAX は,limits.h で定義されています。_rtl_write は,改行文字(LF)を CR/LF ペアに変換しません。これは,すべてのファイルがバイナリファイルだからです。
実際に書き込まれたバイト数が要求されたバイト数より少ない場合は,エラーとみなす必要があります。その場合は,ディスクに空きがない可能性があります。
ディスクファイルの場合,書き込みは常に現在のファイルポインタから開始されます。デバイスの場合は,直接デバイスにバイトが送信されます。
O_APPEND オプション付きで開かれたファイルの場合,ファイルポインタは,データを書き込む前に EOF に配置されません。
戻り値
成功した場合,_rtl_write は,書き込まれたバイト数を返します。
エラーが発生した場合は -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(200);
/*
現在のディレクトリに「TEST.$$$」という名前のファイルを作成し,それに 200 バイトを書き込みます。TEST.$$$ がすでに存在する場合は,それが上書きされます
*/
if ((handle = open("TEST.$$$", O_CREAT | O_WRONLY | O_BINARY,
S_IWRITE | S_IREAD)) == -1)
{
printf("Error Opening File\n");
exit(1);
}
if ((bytes = _rtl_write(handle, buf, 200)) == -1) {
printf("Write Failed.\n");
exit(1);
}
printf("_rtl_write: %d bytes written.\n",bytes);
return 0;
}
移植性
POSIX | Win32 | ANSI C | ANSI C++ |
---|---|---|---|
+ |