0

このSOの質問と特にこの回答に続いて、printfの後にsetrlimitを呼び出すと機能しないようです。

コード例は次のとおりです。

#include <stdio.h>
#include <sys/resource.h>

int main()
{
    struct rlimit rlp;

    FILE *fp[10000];
    int i;

    printf("Hello\n");

    rlp.rlim_cur = 10000;
    rlp.rlim_max = RLIM_INFINITY;
    setrlimit(RLIMIT_NOFILE, &rlp);

    getrlimit(RLIMIT_NOFILE, &rlp);
    printf("limit %lld %lld\n", rlp.rlim_cur, rlp.rlim_max);

    for(i=0;i<10000;i++) {
        fp[i] = fopen("a.out", "r");
        if(fp[i]==0) { printf("failed after %d\n", i); break; }
    }

}

コンソール出力は次のとおりです。

Hello
limit 10000 9223372036854775807
failed after 4861

最初の にコメントするprintfと、コンソール出力は次のようになります。

limit 10000 9223372036854775807
failed after 9967

その理由はありますか?

[編集] Xcode 4.6.2 で MAC OS X 10.7.5 を実行しています。

4

1 に答える 1