バイナリファイルの書き込みと読み込み・fopen,fwrite,fread †C言語によるバイナリファイルの読み込みおよび書き込みのサンプルコードを以下に記します。 スポンサーリンク 関連記事 †
共通ヘッダーファイル †書き込み、読み込みのサンプルコードで使用するヘッダーファイルは以下の通りです。
#ifndef __PKT_H__ #define __PKT_H__ struct PKT { int a; int b; int c; }; #endif バイナリファイルの書き込みサンプルコード †バイナリファイルの書き込みサンプルコードは以下の通りです。
サンプルコードは、構造体に値をセットしファイルに出力しています。 #include <stdio.h> #include <stdlib.h> #include <errno.h> #include "pkt.h" int main(void) { int i; struct PKT pkt[3]; FILE *fp = NULL; pkt[0].a = 1; pkt[0].b = 2; pkt[0].c = 3; pkt[1].a = 10; pkt[1].b = 20; pkt[1].c = 30; pkt[2].a = 100; pkt[2].b = 200; pkt[2].c = 300; for(i=0; i<3; i++) { printf("pkt[%d].a = %d\n", i, pkt[i].a); printf("pkt[%d].b = %d\n", i, pkt[i].b); printf("pkt[%d].c = %d\n", i, pkt[i].c); } fp = fopen("data.dat", "wb"); if (fp == NULL) { perror("fopen() error!"); exit(EXIT_FAILURE); } /* output to data.dat file */ if (fwrite(&pkt, sizeof(pkt), 1, fp) != 1) { perror("fwrite() error!"); fclose(fp); exit(EXIT_FAILURE); } /* file close */ if (fp != NULL) { fclose(fp); fp = NULL; } return 0; } バイナリファイルの読み込みサンプルコード †バイナリファイルの読み込みサンプルコードは以下の通りです。
サンプルコードは上記のbin-write.cで出力されたバイナリファイルを読み込み、構造体にセットしています。 #include <stdio.h> #include <stdlib.h> #include <errno.h> #include "pkt.h" int main(void) { int i; struct PKT pkt[3]; FILE *fp = NULL; fp = fopen("data.dat", "rb"); if (fp == NULL) { perror("fopen() error!"); exit(EXIT_FAILURE); } if (fread(&pkt, sizeof(pkt), 1, fp) != 1) { perror("fwrite() error!"); fclose(fp); exit(EXIT_FAILURE); } if (fp != NULL) { fclose(fp); fp = NULL; } for(i=0; i<3; i++) { printf("pkt[%d].a = %d\n", i, pkt[i].a); printf("pkt[%d].b = %d\n", i, pkt[i].b); printf("pkt[%d].c = %d\n", i, pkt[i].c); } return 0; } ファイルの書き込み読み込みの実行結果 †以下のように2つのCサンプルコードをコンパイルし実行した結果を記します。 $ gcc bin-write.c -o bin-write $ ./bin-write pkt[0].a = 1 pkt[0].b = 2 pkt[0].c = 3 pkt[1].a = 10 pkt[1].b = 20 pkt[1].c = 30 pkt[2].a = 100 pkt[2].b = 200 pkt[2].c = 300 上記によりdata.datが作成されています。 $ ls -l data.dat -rw-r--r-- 1 sakura sakura 36 8月 10 22:36 data.dat $ hexdump -C data.dat 00000000 01 00 00 00 02 00 00 00 03 00 00 00 0a 00 00 00 |................| 00000010 14 00 00 00 1e 00 00 00 64 00 00 00 c8 00 00 00 |........d.......| 00000020 2c 01 00 00 |,...| 00000024 次に読み込みのCサンプルコードをコンパイルし実行します。 $ gcc bin-read.c -o bin-read $ ./bin-read pkt[0].a = 1 pkt[0].b = 2 pkt[0].c = 3 pkt[1].a = 10 pkt[1].b = 20 pkt[1].c = 30 pkt[2].a = 100 pkt[2].b = 200 pkt[2].c = 300 以上、C言語によるバイナリファイルの書き込みと読み込みのCサンプルコードでした。 スポンサーリンク |