3

OSX 10.7 で実行されている C プログラムで使用できるファイル記述子の最大数を増やしたいと考えています。プロジェクトに次のコードを追加しましたが、失敗します。

struct rlimit limit;
if(getrlimit(RLIMIT_NOFILE, &limit))
{
    perror("Failed to get limit");
    return -1;
}

printf("%llu, %llu\n", limit.rlim_cur, limit.rlim_max);
limit.rlim_cur *= 4;
printf("%llu, %llu\n", limit.rlim_cur, limit.rlim_max);

if(setrlimit(RLIMIT_NOFILE, &limit))
{
    perror("Failed to set limit");
    return -1;
}

これはログを出力します:

4864, 9223372036854775807
19456, 9223372036854775807
Failed to set limit: Invalid argument

上限が少し高すぎるようです。どうしたの?

4

1 に答える 1

8

man setrlimit から:

setrlimit() は、歴史的に成功した場所で EINVAL に設定された errno で戻るようになりました。... "rlim_cur = min(OPEN_MAX, rlim_max)" を使用します。

OPEN_MAX は、<sys/syslimits.h> で10240として定義されています。

そのため、rlimit_cur を 19456 に設定できませんでした。

于 2012-09-10T05:49:20.083 に答える