fwriteは指定されたメモリ領域のデータを指定されたサイズ分、ファイルなどのストリームに出力するC標準ライブラリ関数・・・。
の2番目がfwrite・・・。
一般的には、変数や配列、構造体などをバイナリデータのままファイルに書き込むときに使う・・・。
書き込むデータのアドレス、データ1個のサイズ、データの個数、ファイルポインタ、の順で指定する・・・。
以前、構造体の頁で作ったstruct_tag_profileの構造体変数prof、これをfwriteでバイナリ書き込みしてみる・・・。
struct_tag_pofileはこんな感じだったとおもう・・・。
charが1バイト、intが4バイトなので、構造体全体のサイズは、1 * 32 + 4 * 1 + 1 * 128 = 164バイト・・・。
これ覚えとこう・・・。
構造体変数profとファイルポインタfpを用意・・・。
profに各要素を入力・・・。
ファイル"prof.bin"をバイナリ書き込みモード("wb")で開く・・・。
fwriteでファイルに書き込む・・・。
第1引数のprofのアドレスを渡すところは、fwriteの引数型がいろんな型のデータを扱えるようにvoid *になっているので、キャストしとく・・・。
struct_tag_profile型が1個なので、sizeof(prof)、1、と並ぶ・・・。
ファイルを閉じる・・・。
まず、
$ ls fwrite fwrite.c $
この状態で、
$ ./fwrite prof.name: Taro prof.age: 20 prof.address: Tokyo $
このように入力・・・。
$ ls -al prof.bin -rw-rw-r-- 1 bg1 bg1 164 3月 1 12:49 prof.bin $
prof.binが出来ている・・・。
しかも構造体のサイズ164と同じ・・・。
viなどで開くと、
Taro^@^?^@^@?~?^E$^?^@^@^@^@^@^@^@^@^@^@`E?^E$^?^@^@^T^@^@^@Tokyo^@Y??^?^@^@.N=?^@^@^@^@?^C@^@^@^@^@^@????^@^@^@^@p?Y??^?^@^@8^Q?^E$^?^@^@X^V?^E$^?^@^@U?Y??^?^@^@^A^@^@^@^@^@^@^@^A^@^@^@^@^@^@^@?^G@^@^@^@^@^@?^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@?^G@^@^@^@^@^@?^E@^@^@^@^@^@0?Y?
Taroとか、Tokyoとか、入力したデータが書き込まれてる痕跡が見える・・・。