在C(OSX)中更改文件描述符限制

cha*_*e55 3 c macos file-descriptor setrlimit

我想增加我的C程序可用的最大文件描述符数,该程序在OSX 10.7上运行.我已将以下代码添加到我的项目中,但它失败了!

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;
}
Run Code Online (Sandbox Code Playgroud)

它打印日志:

4864, 9223372036854775807
19456, 9223372036854775807
Failed to set limit: Invalid argument
Run Code Online (Sandbox Code Playgroud)

最大限制似乎有点太高了.这是怎么回事?

fre*_*ler 7

来自man setrlimit:

setrlimit()现在返回,并且在历史上成功的地方将errno设置为EINVAL....使用"rlim_cur = min(OPEN_MAX,rlim_max)".

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

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