实现文件:
//max_fd_cnt.h
#ifndef _OPEN_MAX
#define _OPEN_MAX
long open_max(void);
#endif
//max_fd_cnt.c
#include "max_fd_cnt.h"
#include <errno.h>
#include <limits.h>
#include <unistd.h>
#include <stdio.h>
#ifdef OPEN_MAX
static long openmax = OPEN_MAX
#else
static long openmax = 0;
#endif
/*
if OPEN_MAX is indeterminate, this might be inadequate
*/
#define OPEN_MAX_GUESS 256
long open_max(void)
{
if(openmax == 0){
errno = 0;
if((openmax = sysconf(_SC_OPEN_MAX)) < 0){
if(errno == 0)
openmax = OPEN_MAX_GUESS; //it's indeterminate,return -1 and not change errno
else
perror("sysconf error for _SC_OPEN_MAX");//_SC_OPEN_MAX is invalid,errno is set EINVAL
}
}
return(openmax);
}
测试程序:
//getcnt.c
#include <stdio.h>
#include "max_fd_cnt.h"
int main(void){
printf("open max:%ld\n",open_max());
}
编译执行:
#gcc getcnt.c max_fd_cnt.c -o getcnt
#./getcnt
open max:1024