C语言 如何设置在一个进程中打开的最大文件数?



操作系统控制打开的文件描述符的最大数目。

是否有一种方法,只有一个进程设置了一个特定的最大开放文件数,而其他进程只能使用传统的默认最大开放文件数?

可以。

进程可以使用getrlimitsetrlimit来限制它可以打开的文件数量。

对当前进程进行操作。

一个程序可以使用fork,使用getrlimit/setrlimit,然后执行(例如)execvp来限制子程序。


下面是一些代码。由于stdin/stdout/stderr是打开的,因此报告的计数将减少3。

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/resource.h>
void
show(struct rlimit *rlim,const char *who)
{
printf("rlim_cur=%d rlim_max=%d [%s]n",
rlim->rlim_cur,rlim->rlim_max,who);
}
int
main(int argc,char **argv)
{
int err;
struct rlimit rlim;
--argc;
++argv;
setlinebuf(stdout);
setlinebuf(stderr);
err = getrlimit(RLIMIT_NOFILE,&rlim);
if (err < 0) {
perror("getrlimit");
exit(1);
}
show(&rlim,"original");
if (argc > 0) {
rlim.rlim_cur = atoi(*argv);
err = setrlimit(RLIMIT_NOFILE,&rlim);
if (err < 0) {
perror("setrlimit");
exit(1);
}
err = getrlimit(RLIMIT_NOFILE,&rlim);
if (err < 0) {
perror("setrlimit");
exit(1);
}
show(&rlim,"setrlimit");
}
int count = 0;
while (1) {
int fd = open("/dev/null",O_RDONLY);
if (fd < 0) {
perror("open");
break;
}
++count;
}
printf("max open files: %dn",count);
return 0;
}
正常输出:

rlim_cur=1024 rlim_max=4096 [original]
open: Too many open files
max open files: 1021

参数为17的输出:

rlim_cur=1024 rlim_max=4096 [original]
rlim_cur=17 rlim_max=4096 [setrlimit]
open: Too many open files
max open files: 14

使用prelimit更改特定进程的资源限制的一种方法,

prelimit——pid<PID>——nofile=1024:4095

内部prelimit使用系统调用setrlimit()来设置限制。

相关内容

  • 没有找到相关文章

最新更新