今回でようやく値が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$
バッチリです。


コメント