C言語によるバイナリファイルの読み込みおよび書き込みのサンプルコードを以下に記します。
サンプルコードの内容は、構造体の内容をファイルに出力するサンプルコードとファイルを読み込み構造体にセットするサンプルコードから構成されています。
書き込み、読み込みのサンプルコードで使用するヘッダーファイルは以下の通りです。
pkt.h (改行コードLF)
#ifndef __PKT_H__
#define __PKT_H__
struct PKT {
int a;
int b;
int c;
};
#endif
バイナリファイルの書き込みサンプルコードは以下の通りです。
bin-write.c (改行コードLF)
サンプルコードは、構造体に値をセットしファイルに出力しています。
#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-read.c (改行コードLF)
サンプルコードは上記の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が作成されています。
またhexdumpコマンドで内容を確認してみます。
$ 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サンプルコードでした。