相当于 OPEN_MAX 的便携式

rwa*_*ace 2 c linux bsd posix

nftw想要使用的文件句柄数量的参数,并且似乎没有办法说“尽可能多”。指定 255 似乎在 Linux 上工作,但在 BSD 上失败。显然 OPEN_MAX 是 BSD 上推荐的解决方案,但我不能使用它,因为它在 Linux 上不起作用。

是否有可在 Linux 和 BSD 上运行的 OPEN_MAX 的便携式等价物?

或者,是否有一个可移植的数字,一些大到不会减慢速度的数字,出于实际目的是可移植的(理想情况下在 POSIX 中指定,或者至少可以在每个具有重要市场份额的类 Unix 系统上运行)?

sar*_*old 5

Unix 环境中的高级编程,第 2 版为我们提供了以下应该适用于任何地方的代码;虽然这是很聪明的,我认为这是一个有点可惜它不检查进程的rlimits,因为rlimits可以进一步约束的过程可以有多少打开的文件使用。除此之外,这是The Master的代码:

#ifdef  OPEN_MAX
static long openmax = OPEN_MAX;
#else
static long openmax = 0;
#endif

/*
 * If OPEN_MAX is indeterminate, we're not
 * guaranteed that this is adequate.
 */
#define OPEN_MAX_GUESS  256

long
open_max(void)
{
    if (openmax == 0) {     /* first time through */
        errno = 0;
        if ((openmax = sysconf(_SC_OPEN_MAX)) < 0) {
            if (errno == 0)
                openmax = OPEN_MAX_GUESS;   /* it's indeterminate */
            else
                err_sys("sysconf error for _SC_OPEN_MAX");
        }
    }

    return(openmax);
}
Run Code Online (Sandbox Code Playgroud)

err_sys()apue.h带有源的标题中提供 - 应该很容易为您的例程编写替代代码。)