改变文件描述符个数

查看本机一个进程能打开的最大文件描述符:
ulimit -n//[0,1023)
修改个数:
sudo ulimit -n x//x为要修改成为的描述符个数
如果要通过程序来修改,则要用到getrlimit(.....);
其中 rlimit结构体如下所示
//soft limit是指内核所能支持的资源上限。比如对于RLIMIT_NOFILE(一个进程能打开的最大文件数,内核默认是1024),
soft limit最大也只能达到1024。对于RLIMIT_CORE(core文件的大小,内核不做限制),soft limit最大能是unlimited。
  1. struct rlimit {
  2.  
       rlim_t rlim_cur;  //soft limit
  3.  
       rlim_t rlim_max;  //hard limit 
  4. };


一下为修改的代码,因为我的头文件是根据平常用的自动生成的,所以有一些是不必要的

#include <iostream>
#include<pthread.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<netinet/in.h>
#include<string.h>
#include<string>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include <sys/time.h>
#include <sys/resource.h>

using namespace std;
#define ERR_EXIT(m)\
do\
{\
perror(m);\
exit(EXIT_FAILURE);\
}while(0)
int main()
{
struct rlimit rl;
if(getrlimit(RLIMIT_NOFILE,&rl)<0)
{
ERR_EXIT("getlimit");

}
rl.rlim_cur=2048;
rl.rlim_max=2048;
if(setrlimit(RLIMIT_NOFILE,&rl)<0)
ERR_EXIT("RL");
cout<<rl.rlim_max<<endl;
cout<<rl.rlim_cur<<endl;
}

但是这个程序只能更改当前进程的个数,如果我们在终端输入 ulimit -n,他还是1024

FD_SETSIZE的最大值是1024,它是一个宏定义,如果我们要修改它,还得重新编译内核

猜你喜欢

转载自www.cnblogs.com/illfuckingkyzb/p/10152145.html
今日推荐