読者です 読者をやめる 読者になる 読者になる

fwrite

fwriteは指定されたメモリ領域のデータを指定されたサイズ分、ファイルなどのストリームに出力するC標準ライブラリ関数・・・。

Man page of FREAD

の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とか、入力したデータが書き込まれてる痕跡が見える・・・。

Sample/fwrite.c at master · bg1bgst333/Sample · GitHub