fwrite/fcloseで書き込みエラーは取れません。
ディスクとCPUが非同期になっているため、プログラムの
終了後にエラーがくる場合があるからです。
また、mallocがNULLを返さないOSもあります。
これも実際に使用するまで取らないからです。
将来、これらの関数を全部voidにして、
シグナルや例外処理およびプログラム終了後の
ハンドラ登録方式にでもにまとめるべきかと。