sysconf()、pathconf()和fpathconf()函数

对于运行时的限制值和选项,我们已经知道可以用sysconf()、pathconf()和fpathconf()三个函数之一来确定它们的值。具体地,sysconf()用于获得与文件或目录无关的限制值,以及系统特征选项;pathconf()和fpathconf()用于获得与文件或目录有关的限制值。这三个函数的原型为:
#include
long int sysconf(int parameter);
long int pathconf(const char *pathname,int parameter);
long int fpathconf(int filedes,int parameter);

sysconf()用于确定当前的系统变量之值(即限制值和特征选项),其中参数parameter指出要询问的是哪个系统变量,它应当是头文件中定义的以'_SC_'开头的符号常数之一。表2-10中列出了sysconf函数所使用的name参数,用于标识系统限制。以_SC_开始的长廊用作标示运行时限制的sysconf参数。函数pathconf()和fpathconf()作用相同,它们都用于查询与文件系统限制和选项有关的值,不同的只是pathconf()作用于文件名pathname,而fpathconf()作用于已打开的文件描述字 filedes。参数parameter必须是定义在头文件中以'_PC_'开头的符号常数之一


三个函数的返回值说明如下:


1,如果name不是表2-10和2-11的第三列中的一个合适的常量,则所有这三个函数都会返回-1,并将errno设置为EINVAL;


2,有些name可以返回变量的值(返回值大于等于0),或者返回-1,这表示该值是不确定的,此时并不改变errno的值;


3,_SC_CLK_TCK的返回值是每秒钟的时钟滴答数,以用于times函数的返回值。


对于pathconf的参数pathname以及fpathconf的参数filedes有一些限制。如果不满足其中任何一个限制,则结果是未定义的。


1,_PC_MAX_CANON和_PC_MAX_INPUT所音乐呢的文件必须是终端文件;


2,_PC_LINK_MAX所引用的文件可以使文件或目录。如果是目录,则返回值用于目录本身(而不是用于目录内的文件名项);


3,_PC_FILESIZEBITS和_PC_NAME_MAX所引用的文件必须是目录,返回值用于该目录中的文件名;


4,_PC_PATH_MAX引用的文件必须是目录。当所指定的目录是工作目录时,返回值是相对路径名的最大长度;


5,_PC_PIPE_BUF所引用的文件必须是管道、FIFO或目录。在管道或者FIFO情况下,返回值是对所引用的管道或FIFO的限制值。对于目录,返回值是对在该目录中创建的任一FIFO的限制值;


6,_PC_SYMLINK_MAX所引用的文件必须是目录。返回值是该目录中符号链接可能包含的字符串的最大长度。 

sysconf()、pathconf()和fpathconf()函数_第1张图片

sysconf()、pathconf()和fpathconf()函数_第2张图片

你可能感兴趣的:(UNIX环境高级编程)