今回でようやく値がFFのバイナリデータを作ります。
前回作ったプログラムの最終形態はこれです。
takk@deb9:~/tmp$ cat -n t.c 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <unistd.h> 4 5 int main(int argc, char* argv[]) 6 { 7 FILE *fp; 8 int size=0; 9 int ch; 10 11 while ((ch = getopt(argc, argv, "s:")) != -1){ 12 switch (ch) { 13 case 's': 14 size = atoi(optarg); 15 break; 16 default: 17 printf("parameter error\n"); 18 return 1; 19 } 20 } 21 22 if(optind >= argc){ 23 printf("parameter error\n"); 24 return 1; 25 } 26 27 fp = fopen(argv[optind],"w"); 28 29 while(size--) 30 fputc(0,fp); 31 32 fclose(fp); 33 } 34 takk@deb9:~/tmp$
これをベースに、値を指定できる-vオプションを追加します。
値を保持する変数はvalueとしました。
5 int main(int argc, char* argv[]) 6 { 7 FILE *fp; 8 int size=0; 9 int value=0;
-vオプションも、引数付きにするので、v:という指定になります。
12 while ((ch = getopt(argc, argv, "s:v:")) != -1){ 13 switch (ch) { 14 case 's': 15 size = atoi(optarg); 16 break; 17 case 'v': 18 value = atoi(optarg); 19 break;
sizeの取り込みとまったく同じです。
で、最後に保持しているvalueの値にファイルへ書き込むように修正すれば完成。
33 while(size--) 34 fputc(value,fp);
全ソース。
takk@deb9:~/tmp$ cat -n t.c 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <unistd.h> 4 5 int main(int argc, char* argv[]) 6 { 7 FILE *fp; 8 int size=0; 9 int value=0; 10 int ch; 11 12 while ((ch = getopt(argc, argv, "s:v:")) != -1){ 13 switch (ch) { 14 case 's': 15 size = atoi(optarg); 16 break; 17 case 'v': 18 value = atoi(optarg); 19 break; 20 default: 21 printf("parameter error\n"); 22 return 1; 23 } 24 } 25 26 if(optind >= argc){ 27 printf("parameter error\n"); 28 return 1; 29 } 30 31 fp = fopen(argv[optind],"w"); 32 33 while(size--) 34 fputc(value,fp); 35 36 fclose(fp); 37 } 38 takk@deb9:~/tmp$
0~255(FF)の値を指定して動作確認します。
takk@deb9:~/tmp$ for i in {0..255};do ./a.out -v$i -s5 $i.bin;done takk@deb9:~/tmp$
実行するとファイルが256個できます。
takk@deb9:~/tmp$ ls *.bin 0.bin 131.bin 165.bin 199.bin 231.bin 35.bin 69.bin 1.bin 132.bin 166.bin 2.bin 232.bin 36.bin 7.bin ~省略~ 13.bin 163.bin 197.bin 23.bin 33.bin 67.bin 130.bin 164.bin 198.bin 230.bin 34.bin 68.bin takk@deb9:~/tmp$
適当にピックアップして、ファイルの中身をのぞいてみましょう。
takk@deb9:~/tmp$ od -tx1 -Ad 99.bin 0000000 63 63 63 63 63 0000005 takk@deb9:~/tmp$ od -tx1 -Ad 100.bin 0000000 64 64 64 64 64 0000005 takk@deb9:~/tmp$ od -tx1 -Ad 101.bin 0000000 65 65 65 65 65 0000005 takk@deb9:~/tmp$
バッチリです。
コメント