关于OPEN_MAX宏undeclared的问题

最近在看unp时,I/O复用-poll一章的代码使用到了OPEN_MAX。据书中描述,这一宏定义在limits.h头文件中,指代一个进程在任意时刻能打开的最大描述符数目。但在代码编译时遇到了错误,提示该宏undeclared。经了解,2.6.24以后的内核,OPEN_MAX不在linux/limits.h里面定义了。Remove OPEN_MAX

现在OPEN_MAX已经取消,已经变成了资源限制RLIMIT_NOFILE的一部分,想要获取这个值,可以用如下的代码:

#include <stdio.h>
#include <sys/resource.h>
#include <stdlib.h>
#include <errno.h>

#define handle_error(msg) 
                    do{perror(msg);exit(EXIT_FAILURE);}while(0)
int main()
{
  struct rlimit limit;
  if(getrlimit(RLIMIT_NOFILE,&limit) == -1)
      handle_error("getrlimit");
    printf("getrlimit = %d
",(int)limit.rlim_cur);

  return 0;
}

ps:当前系统该最大值可通过ulimit -a | grep 'open files'来获取,一般为1024

参考自:http://blog.csdn.net/CMbug/article/details/48313107

原文地址:https://www.cnblogs.com/cknightx/p/7436079.html