前回は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$
動きました。
コメント