stat関数を使う(その2)

stat関数を使う」で作ったmystat.cを改造してみます。ファイルサイズを手軽に確認するためのコマンドを作ります。

takk@deb9:~/tmp$ cat -n mystat.c
     1	#include <sys/types.h>
     2	#include <sys/stat.h>
     3	#include <unistd.h>
     4	#include <stdio.h>
     5	
     6	int main(int argc, char* argv[])
     7	{
     8		struct stat buf[1];
     9		char* filename;
    10	
    11		filename = argv[1];
    12	
    13		stat(filename, buf);	
    14	
    15		printf("%s size=%d\n",filename,buf[0].st_size);
    16	
    17		return 0;
    18	}
takk@deb9:~/tmp$ 

stat構造体のst_sizeを使って、ファイルサイズを表示するプログラムです。

ビルドして実行。テスト用のtest.binは64Byteにしておきます。

takk@deb9:~/tmp$ gcc mystat.c
takk@deb9:~/tmp$ truncate -s64 test.bin
takk@deb9:~/tmp$ ./a.out test.bin
test.bin size=64
takk@deb9:~/tmp$ 

動きました。でも1ファイルしか対応してません。
複数のファイルのファイルサイズが確認できるように改造してみます。

takk@deb9:~/tmp$ cat -n mystat.c
     1	#include <sys/types.h>
     2	#include <sys/stat.h>
     3	#include <unistd.h>
     4	#include <stdio.h>
     5	
     6	int main(int argc, char* argv[])
     7	{
     8		int i;
     9		struct stat buf;
    10		char* filename;
    11	
    12		for(i=1;i<argc;i++){
    13			filename = argv[i];
    14			stat(filename, &buf);
    15			printf("%s size=%d\n",filename,buf.st_size);
    16		}
    17	
    18		return 0;
    19	}
takk@deb9:~/tmp$ 

ビルド。さらにテスト用にtest2.binとtest3.binを生成。

takk@deb9:~/tmp$ gcc mystat.c
takk@deb9:~/tmp$ truncate -s32 test2.bin
takk@deb9:~/tmp$ truncate -s16 test3.bin

実行します。

takk@deb9:~/tmp$ ./a.out *.bin
test.bin size=64
test2.bin size=32
test3.bin size=16
takk@deb9:~/tmp$ 

動きました。

そういえば、ファイルのサイズをお手軽に確認するコマンドってない気がします。
ls -lとかwc -cとか、入力が面倒だし、wcだけだと表示項目が多いので、サイズだけ表示してくれる1文字ないし、2文字ぐらいのコマンドがあるといいなあ。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA