write(C++)
io.h:インデックス への移動
ヘッダー ファイル
io.h
カテゴリ
入出力ルーチン
プロトタイプ
int write(int handle, void *buf, unsigned len);
説明
ファイルに書き込みます。
write は、指定したハンドルが示すファイルやデバイスに、バッファのデータを書き込みます。ファイル ハンドル handle は、creat、open、dup、または dup2 の呼び出しによって取得されます。
この関数は handle に関連付けられたファイルに、buf が指すバッファから len バイトの書き込みを試みます。テキスト ファイルへの書き込みに write を使用する場合を除き、ファイルに書き込まれるバイト数は、単に要求バイト数です。write が書き込むことができる最大バイト数は、UINT_MAX -1 です。これは、UINT_MAX が -1(エラーを示す戻り値)に等しいからです。テキスト ファイルの場合、write で改行(LF)文字を検出すると、CR/LF のペアを出力します。UINT_MAX は limits.h で定義されています。
実際に書き込まれたバイト数が要求値よりも小さい場合は、エラーの発生(ディスクに空き容量がないなど)を考える必要があります。ディスクやディスク ファイルの場合、現在のファイル ポインタの位置から常に書き込みを開始します。デバイスの場合は、デバイスにバイトが直接送信されます。O_APPEND オプション付きで開かれたファイルの場合は、ファイル ポインタが EOF に移動してから、write がデータを書き込みます。
戻り値
write は、書き込んだバイト数を返します。テキスト ファイルへの書き込みでは、生成された復帰(CR)はカウントされていません。エラーが発生した場合、write は -1 を返し、グローバル変数 errno に次のいずれかの値が設定されています。
|
EACCES |
アクセスが拒否されました。 |
|
EBADF |
ファイル番号が不正です。 |
例
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys\stat.h>
#include <io.h>
#include <string.h>
int main(void)
{
int handle;
char string[40];
int length, res;
/*
Create a file named "TEST.$$$" in the current directory and write a string to it. If "TEST.$$$" already exists, it will be overwritten.
*/
if ((handle = open("TEST.$$$", O_WRONLY | O_CREAT | O_TRUNC,
S_IREAD | S_IWRITE)) == -1)
{
printf("Error opening file.\n");
exit(1);
}
strcpy(string, "Hello, world!\n");
length = strlen(string);
if ((res = write(handle, string, length)) != length)
{
printf("Error writing to the file.\n");
exit(1);
}
printf("Wrote %d bytes to the file.\n", res);
close(handle);
return 0;
}
移植性
| POSIX | Win32 | ANSI C | ANSI C++ |
|---|---|---|---|
|
+ |
+ |