Web更新

Linux のファイルシステム(その2)|社長のアジト

前回の調査で1つのファイルサイズが16Tまで行けるのが分かったがまた疑問が出てきた。

昔は1つのディレクトリに多くのファイルを作りディレクトリリスト(ls とかで見るとき)を取ると

物凄く時間がかかったのをふと思い出しちょっと試してみた。

作ったプログラムは以下の通り

 

#include <stdio.h>
#include <stdlib.h>
main(int argc, char *argv[])
{
    int     i, cnt ;
    FILE    *fp ;
    char    *fileName ;

    cnt = atoi(argv[1]) ;
    if(cnt == 0)
    {
        printf("arg not found\n") ;
        exit(1) ;
    }
    printf("%d file create\n", cnt) ;

    for(i=0; i<cnt; i++)
    {
        fp = fopen((fileName = tempnam("./", "testdat")), "w") ;
        if(fp == NULL)
        {
            printf("File Open Error\n") ;
            exit(1) ;
        }
        printf("%s\n", fileName) ;
        fputs("it's fine today !\n", fp) ;
        free(fileName) ;
        fclose(fp) ;
    }
}

tempnam()関数使ってるのは突っ込まないでくださいね!(テストコードなので・・・)

 

プログラムの引数の数だけファイルを作ってしまうプログラムを作成した。
記憶によれば65000ファイルも作ってターミナルから ls と叩くと数分帰ってこない。

やっぱり進化していますね! 1秒程度でリストが表示されます。

ぢゃ! 100万ファイルいけるかな?w

100万ファイル作って以下の様に実行をしてみた。

[ugawa@sv work]$ time ll | wc
1000005 9000038 58000225

real 0m18.390s
user 0m14.316s
sys 0m6.059s

18秒と時間はかかったものの遙かに素晴らしい!
ディレクトリに多くのファイルを作ってもこれくらいのスピードであれば使い物になると思う。

余り役に立たない話かもしれないが何かの参考になれば!

 

こんな私に興味があればFacebookでほとんどの投稿公開していますので読んでみてください。

但し、お友達申請は実際にお会いした方か友人の御紹介がないとお受けしておりませんので悪しからず。


関連記事一覧