1. 程式人生 > >改變檔案描述符個數

改變檔案描述符個數

檢視本機一個程序能開啟的最大檔案描述符:
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,它是一個巨集定義,如果我們要修改它,還得重新編譯核心