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
理解的也不是很深,还有一些模糊的地方,需要以后仔细研究。
转载于:https://blog.51cto.com/aaroncao/1602479