守护进程在运行后常做的一件事情是关闭当前所有打开的文件。代码如:
#include
for (i = 0; i
我们希望使用POSIX.1的OPEN_MAX来提高代码可移植性, (OPEN_MAX 表示系统设置的能打开的最大文件数)
#include
for (i = 0; i
但是有可能会出现系统未设置OPEN_MAX值的情况,sysconf会返回-1导致for循环根本不会运行,这里编写小程序。
PS: 根据书后习题,添加了当OPEN_MAX被系统缺省设置为LONG_MAX的情况,如果是那样的话,会浪费大量时间。
/* *
*
* CHANGE CODE 2-4 IN APUE ACC FOR LONG_MAX RETURN BY SYSCONF
*
* APUE TEST 2.3
*
* MIUC 2011.06.26
*
* */
#include
#include
#include
#include
#ifdef OPEN_MAX
static long openmax = OPEN_MAX;
#else
static long openmax = 0;
#endif
#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 */
else {
printf("sysconf error for _SC_OPEN_MAX\n");
return -1;
}
} else
if (openmax == LONG_MAX) openmax = OPEN_MAX_GUESS; /* LONG_MAX is too long , waste time */
}
return openmax;
}
int main()
{
printf("openmax : %ld\n", open_max());
return 0;
}