APUE习题2.3 —— sysconf 的使用和调整

守护进程在运行后常做的一件事情是关闭当前所有打开的文件。代码如:

#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;
}

此条目发表在C, Linux, 系统, 编程分类目录,贴了, , , 标签。将固定链接加入收藏夹。

发表评论

邮箱地址不会被公开。 必填项已用*标注