前回はtruncateでバイナリデータ生成しましたが、今回はC言語を使って作ってみます。
最初は小さいプログラムを作って、少しずつ大きくしていきます。
まず、1Byteの0値データのファイルを生成するプログラム。
takk@deb9:~/tmp$ cat t.c
#include <stdio.h>
int main()
{
FILE *fp = fopen("a.bin","w");
fputc(0,fp);
fclose(fp);
}
takk@deb9:~/tmp$
実行すると、
takk@deb9:~/tmp$ gcc t.c takk@deb9:~/tmp$ ./a.out takk@deb9:~/tmp$ od -tx1 a.bin 0000000 00 0000001 takk@deb9:~/tmp$
簡単です。
次は、生成するファイル名を、コマンドのパラメータで指定できるようにします。
(書式) a.out ファイル名
です。
takk@deb9:~/tmp$ cat t.c
#include <stdio.h>
int main(int argc, char* argv[])
{
FILE *fp;
if(argc != 2){
printf("parameter error\n");
return 1;
}
fp = fopen(argv[1],"w");
fputc(0,fp);
fclose(fp);
}
takk@deb9:~/tmp$
一応パラメータチェックも入れてあります。
ビルドして、実行。
takk@deb9:~/tmp$ gcc t.c takk@deb9:~/tmp$ ./a.out parameter error takk@deb9:~/tmp$
パラメータでファイル名を指定しないとエラーになります。
パラメータでbb.binと指定して実行してみましょう。
takk@deb9:~/tmp$ ./a.out bb.bin takk@deb9:~/tmp$ od -tx1 bb.bin 0000000 00 0000001 takk@deb9:~/tmp$
動きました。内容も合ってます。
最後に、サイズも指定できるように改造します。
takk@deb9:~/tmp$ cat -n t.c
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int main(int argc, char* argv[])
5 {
6 FILE *fp;
7 int size;
8
9 if(argc != 3){
10 printf("parameter error\n");
11 return 1;
12 }
13 size = atoi(argv[2]);
14 fp = fopen(argv[1],"w");
15
16 while(size--)
17 fputc(0,fp);
18
19 fclose(fp);
20 }
21
takk@deb9:~/tmp$
atoiは、ascii to integerの意味の関数で、10進数文字列を、値に変換してくれます。
使用するには、stdlib.hをインクルードする必要があります。
実行します。
takk@deb9:~/tmp$ gcc t.c takk@deb9:~/tmp$ ./a.out ccc.bin 10 takk@deb9:~/tmp$ od -tx1 -Ad ccc.bin 0000000 00 00 00 00 00 00 00 00 00 00 0000010 takk@deb9:~/tmp$
動きました。


コメント