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++ |
---|---|---|---|
+ |
+ |