オールFFファイル

前回は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$ 

動きました。

コメント

タイトルとURLをコピーしました