在开始用C编写的程序之前,我必须运行命令“ulimit -n 400”来提高允许打开文件的数量,但有没有办法在C程序中执行相同的操作?
即,增加该进程允许的打开文件描述符的数量。 (我对每个线程限制不感兴趣。)
是否涉及设置ulimits,然后分叉允许有更多打开文件的孩子?
当然,我可以编写一个运行ulimit的shell包装器,然后启动我的C程序,但感觉不那么优雅。我也可以通过bash或sh的源代码来查看它是如何在那里完成的 - 如果我在这里没有答案,我也许会这样做。
同样相关的是,如果你想选择很多文件描述符,look here。
答案 0 :(得分:11)
我认为您正在寻找setrlimit(2)
。
答案 1 :(得分:4)
#include <sys/resource.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int main (int argc, char *argv[])
{
struct rlimit limit;
limit.rlim_cur = 65535;
limit.rlim_max = 65535;
if (setrlimit(RLIMIT_NOFILE, &limit) != 0) {
printf("setrlimit() failed with errno=%d\n", errno);
return 1;
}
/* Get max number of files. */
if (getrlimit(RLIMIT_NOFILE, &limit) != 0) {
printf("getrlimit() failed with errno=%d\n", errno);
return 1;
}
printf("The soft limit is %llu\n", limit.rlim_cur);
printf("The hard limit is %llu\n", limit.rlim_max);
/* Also children will be affected: */
system("bash -c 'ulimit -a'");
return 0;
}