sysconf、pathconf和fpathconf

开始学习《unix环境高级编程》了。遇到的第一个难题就是这几个函数,还好总算是搞懂了。

3个函数的原型:

#include <unistd.h>
long sysconf(int name);
long pathconf(const char *pathname, int name);
long fpathname(int filedes, int name);
所有函数返回值:若成功则返回相应值;若出错则返回-1.

这三个函数是用来求一些限制的,unix中有以下三种限制:

(1)编译时限制(头文件)

(2)不与文件或目录相关联的运行时限制(sysconf函数)

(3)与文件或目录相关联的运行时限制(pathconf函数和fpahtconf函数)

 

我的理解:有些限制是已经确定好了,在头文件中,不会改变了;另外一些是不确定的,没有在头文件中给出定义,只能通过这三个函数,来确定其运行时的值。

 

一个简单使用这些函数的小程序:

#include<stdio.h>
#include<errno.h>
#include<limits.h>  //把它注释掉好像也对
#include<unistd.h>

int main(int argc, char *argv[])
{
#ifdef ARG_MAX
    printf("ARG_MAX defined to be %d\n",ARG_MAX);
#else
    printf("no symbol for ARG_MAX.\n");
#endif
    long int arg_max=0;
    
arg_max = sysconf(_SC_ARG_MAX);
    if(
arg_max < 0)
    {
        if(errno != 0)
        { 
            if(errno == EINVAL)
                printf("name not valid.\n");
            else
                printf("sysconf error.\n");
        }
        else
        {
            printf("no limit.\n");
        }
    }
    else
    {
        printf("clock %ld\n",
arg_max);
    }

//这一句只是使用一下pathconf函数,必须像上面一样使用一些判断语句,这里偷懒了。
    printf("LINK_MAX: %ld\n", pathconf("/home",_PC_LINK_MAX));

    return 0;
}

转载于:http://blog.sina.com.cn/s/blog_6b8397010100psyb.html

理解的也不是很深,还有一些模糊的地方,需要以后仔细研究。