改變檔案描述符個數
阿新 • • 發佈:2018-12-20
檢視本機一個程序能開啟的最大檔案描述符: 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。
-
struct rlimit {
- rlim_t rlim_cur; //soft limit
- rlim_t rlim_max; //hard limit
- };
一下為修改的程式碼,因為我的標頭檔案是根據平常用的自動生成的,所以有一些是不必要的
#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,它是一個巨集定義,如果我們要修改它,還得重新編譯核心