nftw
想要使用一个参数来处理文件句柄的数量,似乎没有办法说'尽可能多'。指定255似乎适用于Linux,但在BSD上失败。显然OPEN_MAX是推荐的BSD解决方案,但我不能使用它,因为它在Linux上不起作用。
OPEN_MAX是否可以在Linux和BSD上同时运行?
或者,是否有一个便携式号码,一些数字足够大,不会减慢速度,可移植用于实际目的(理想情况下在POSIX中指定,或者至少适用于具有大量市场份额的每个类似Unix的系统) ?
答案 0 :(得分:4)
Advanced Programming in the Unix Environment, 2nd Ed为我们提供了以下代码:虽然它非常聪明,但我认为它有点不幸它还检查进程的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);
}
(err_sys()
标题中提供了apue.h
来源 - 应该很容易为您的例程代替替换。)
答案 1 :(得分:2)
见getdtablesize
。它有一致性说明:
SVr4,4.4BSD(getdtablesize()函数首次出现在4.2BSD中)。它没有在POSIX.1-2001中指定;便携式应用程序应使用sysconf(_SC_OPEN_MAX)而不是此调用。