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() 现在在历史上成功的地方返回 errno 设置为 EINVAL。... 使用“rlim_cur = min(OPEN_MAX, rlim_max)”。

OPEN_MAX在 <sys/syslimits.h>中定义为10240

所以它未能将 rlimit_cur 设置为 19456。

于 2012-09-10T05:49:20.083 回答