- 论坛徽章:
- 0
|
学习APUE第二章时,在Fedora8测试了sysconf和pathconf的代码,对结果不理解,请解释:
#ifdef PATH_MAX
static int pathmax = PATH_MAX;
#else
static int pathmax = 0;
#endif
int main(){
char *ptr;
if (pathmax == 0) {
errno = 0;
if ( (pathmax = pathconf("/", _PC_PATH_MAX)) < 0) { //pathconf函数
if (errno == 0)
pathmax = PATH_MAX_GUESS;
else
err_sys("pathconf error for _PC_PATH_MAX");
} else
pathmax++;
}
printf("pathmax=%d\n", pathmax); //这里打印4096. 单位是byte吗?
printf("_PC_PATH_MAX=%ld\n", sysconf(_PC_PATH_MAX)); //这里打印1024,为什么?
}
我觉得它们的值应该是一样的,但是为什么不一样呢?该如何解释????
还有,如果把pathmax直接写成如下(即去掉预定义)
static int pathmax = 0;
且pathconf的第一个参数为工作目录(或其他目录),结果都是4096.
感觉和man上说的不太一样:
_PC_PATH_MAX
returns the maximum length of a relative pathname when path
is the current working directory.
我的理解是如果第一个参数是当前工作路径,那么返回的值应该是相对于该路径而言,即
比相对于根路径要小----即是说要比上面的程序得到的要小。
难道我理解有错? 请指出。 |
|