下面介绍sysconf函数的使用,它允许应用程序在运行时获得系统的限制。


函数的原型为:

1
2
3
4
5
#include <unistd.h>
 
long sysconf(int name);
                        Returns value of limit specified by name,
                 or –1  if  limit is indeterminate or an error occurred


name参数是在unistd.h头文件中定义的一些_SC_*常量。如果传入的name参数是不合法的,sysconf()函数将返回-1。


示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[root@lavenliu syslim]# cat my_sysconf.c 
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
 
static  void  pr_sysconf( const  char  *msg,  int  name)
{
     long  lim;
 
     errno  = 0;
     lim = sysconf(name);
     if  (lim != -1) {
         printf ( "%s %ld\n" , msg, lim);
     else  {
         if  ( errno  == 0) {
             printf ( "%s (indeterminate)\n" , msg);
         else  {
             perror ( "sysconf error" );
             exit (1);
         }
     }
}
 
int  main( int  argc,  char  *argv[])
{
     pr_sysconf( "_SC_ARG_MAX:                " , _SC_ARG_MAX);
     pr_sysconf( "_SC_LOGIN_NAME_MAX:         " , _SC_LOGIN_NAME_MAX);
     pr_sysconf( "_SC_OPEN_MAX:               " , _SC_OPEN_MAX);
     pr_sysconf( "_SC_NGROUPS_MAX:        " , _SC_NGROUPS_MAX);
     pr_sysconf( "_SC_PAGESIZE:        " , _SC_PAGESIZE);
     pr_sysconf( "_SC_RTSIG_MAX:        " , _SC_RTSIG_MAX);
     
     return  0;
}


编译运行,

1
2
3
4
5
6
7
8
gcc -o my_sysconf my_sysconf.c
. /my_sysconf
_SC_ARG_MAX:         2621440
_SC_LOGIN_NAME_MAX:  256
_SC_OPEN_MAX:        1024
_SC_NGROUPS_MAX:     65536
_SC_PAGESIZE:        4096
_SC_RTSIG_MAX:       32


从命令行获取这些限制:

1
2
3
4
5
getconf variable-name [ pathname ]
getconf ARG_MAX
2621440
getconf NAME_MAX  /boot
255