arrow 若葉プログラミング塾 > 知識の玉手箱 > C関数リファレンス >
fwrite()
fwrite()

この関数の目的

fwrite()は、ストリームにデータを直接書き出す。 fread() も参照のこと。

定義

	#include <stdio.h>
	size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

働き

この関数は ptr が指す配列から nmemb 個の size の大きさの要素を stream が指すストリームへ書き出す。 ストリームのファイル位置指定子が定義されていれば、成功裡に書かれた文字数だけ進められる。 エラー発生時のファイル位置指定子の値は不定になる。

返り値は、成功裡に書かれた要素数であり、書き込みエラーが発生したときのみ nmemb より小さくなる。

解説

常識的に考えるとバグの元になるのだが、返り値は書き込まれたバイト数ではなく、要素数である。 size に 1 を渡せばバイト数と同じことになる。

fread() 、 fwrite() を使うときに知っておくべきは、fwrite() が出力するのはメモリ上のオブジェクトそのままであり、 出力されたファイルを他のコンピュータ上に持っていっても fread() で復元されない可能性があるということである。 これは CPU の違いに起因するものである。多くのコンピュータで互換性のあるバイナリファイルを作りたかったら、データの表現方法を決めて、 それに変換してから1バイトずつ出力するのが最も安全な方法である。

arrow 若葉プログラミング塾 > 知識の玉手箱 > C関数リファレンス >
KC