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

3
我想增加我的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;
}

它会打印出以下日志:
4864, 9223372036854775807
19456, 9223372036854775807
Failed to set limit: Invalid argument

最大限制看起来有点太高了。出了什么问题?

您可以通过打印 errno 值来指定错误。 - fasked
1个回答

8

来自 man setrlimit:

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

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

因此,无法将 rlimit_cur 设置为 19456。


这就是我从在线Linux参考资料而不是OSX手册中阅读setrlimit的结果... - charliehorse55

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接