zoukankan      html  css  js  c++  java
  • [apue] 一个快速确定新系统上各类限制值的工具

    对于在不同 Unix 系统之间移植程序,最重要的事情就是确定新系统的一些编译时、运行时固定或不固定的限制值了。例如文件路径最大长度 PATH_MAX、进程最大可打开文件句柄数 OPEN_MAX、用户可加入的附加用户组最大数量 NGROUPS_MAX、进程命令行参数最大字节数 ARG_MAX、内存页大小 PAGESIZE、线程栈大小默认值 STACKSIZE、临时文件最大数量 TMP_MAX 等等。甚至有些系统特征也可以通过查询来提前确定,例如是否支持读写锁、是否支持异步 IO、是否支持实时信号等等,这样程序就可以根据系统提供的能力来选择不同的接口去实现同样的功能。

    回头来看 apue 第二章有关系统限制与选项这一块的内容,由于掺杂了 UNIX 标准化的内容,显得很没有条理,例如将各种限制按标准划分为:

    • ISO C
      • 编译时限制 (头文件常量)
    • POSIX
      • 不变的最小值 (声明遵循 POSIX 的系统必需支持到至少这么多,不能再小了)
      • 不变值 (SSIZE_MAX)
      • 运行时可增加的值
      • 运行时不变的值
      • 路径名可变值
    • XSI
      • 不变的最小值 (同上)
      • 数值限制
      • 运行时不变值

    看得人一头雾水,其实如果抛开标准,单按限制的性质来分,就比较简单啦:

    • 编译时限制 (通过头文件常量)
    • 运行时限制
      • 不与文件系统相关部分(通过 sysconf)
      • 与文件系统相关部分(通过 pathconf)

    也就是说,要确定一个系统限制,一共分两步:

    1. 确定相应的符号常量有没有在头文件定义,如果有,直接拿来用;
    2. 如果没有,走 sysconf 或 pathconf 查询。

    对于系统选项,稍等复杂一点,分三步:

    1. 符号常量定义为 -1,平台不支持该选项;
    2. 符号常量定义大于 0,平台支持相应的选项;
    3. 符号常量定义为 0,需要进一步依靠 sysconf 或 pathconf 来查询。

    到这里,你大概已经想到怎么自己制作一个工具了,那就是按上面的逻辑 coding 呗,可以把想要查的常量作为输入,查到的结果打印到控制台,就像下面这样:

    conf.c

     1 #include "../apue.h" 
     2 #include <errno.h>
     3 #include <limits.h> 
     4 
     5 static void pr_sysconf (char*, int); 
     6 static void pr_pathconf (char *, char *, int); 
     7 
     8 int 
     9 main (int argc, char *argv[])
    10 {
    11   if (argc != 2)
    12     err_quit ("usage: conf <dirname>"); 
    13 
    14 #ifdef _POSIX_OPEN_MAX
    15   printf ("_POSIX_OPEN_MAX defined to be %d
    ", _POSIX_OPEN_MAX); 
    16 #else 
    17   printf ("no symbol for _POSIX_OPEN_MAX
    "); 
    18 #endif 
    19 
    20 #ifdef OPEN_MAX
    21   printf ("OPEN_MAX defined to be %d
    ", OPEN_MAX); 
    22 #else 
    23   printf ("no symbol for OPEN_MAX
    "); 
    24 #endif 
    25 
    26 #ifdef _SC_OPEN_MAX
    27   pr_sysconf ("sysconf (_SC_OPEN_MAX) = ", _SC_OPEN_MAX); 
    28 #else 
    29   printf ("no symbol for _SC_OPEN_MAX
    "); 
    30 #endif 
    31 
    32 #ifdef _POSIX_NAME_MAX
    33   printf ("_POSIX_NAME_MAX defined to be %d
    ", _POSIX_NAME_MAX); 
    34 #else 
    35   printf ("no symbol for _POSIX_NAME_MAX
    "); 
    36 #endif 
    37 
    38 #ifdef NAME_MAX
    39   printf ("NAME_MAX defined to be %d
    ", NAME_MAX); 
    40 #else 
    41   printf ("no symbol for NAME_MAX
    "); 
    42 #endif 
    43 
    44 #ifdef _PC_NAME_MAX
    45   pr_pathconf ("pathconf (_PC_NAME_MAX) = ", argv[1], _PC_NAME_MAX); 
    46 #else 
    47   printf ("no symbol for _PC_NAME_MAX
    "); 
    48 #endif 
    49 
    50   exit (0); 
    51 }
    52 
    53 static void 
    54 pr_sysconf (char *msg, int name) 
    55 {
    56   long val; 
    57   fputs (msg, stdout); 
    58   errno = 0; 
    59   if ((val = sysconf (name)) < 0) { 
    60     if (errno != 0) { 
    61       if (errno == EINVAL)
    62         fputs ("(not supported)
    ", stdout); 
    63       else 
    64         err_sys ("sysconf error"); 
    65     }
    66     else
    67       fputs ("(no limit)
    ", stdout); 
    68   }
    69   else
    70     printf ("%ld
    ", val); 
    71 }
    72 
    73 
    74 static void 
    75 pr_pathconf (char *msg, char *path, int name) 
    76 {
    77   long val; 
    78   fputs (msg, stdout); 
    79   errno = 0; 
    80   if ((val = pathconf (path, name)) < 0) { 
    81     if (errno != 0) { 
    82       if (errno == EINVAL)
    83         fputs ("(not supported)
    ", stdout); 
    84       else 
    85         err_sys ("pathconf error, path = %s", path); 
    86     }
    87     else
    88       fputs ("(no limit)
    ", stdout); 
    89   }
    90   else
    91     printf ("%ld
    ", val); 
    92 }

    这个程序处理了两个常量: OPEN_MAX 与 NAME_MAX,对于每个常量,它都尝试检测  _POSIX_XXX 是否存在,不同点在于,前者不依赖于文件系统,所以最后调用 sysconf 检测;后者依赖文件系统,所以调用 pathconf 检测。至于为何在 pr_sysconf / pr_pathconf 中清理 errno,可以参考我之前写过的一篇文章:[apue] sysconf 的四种返回状态 。这个程序要求一个路径,可以这样输入参数来使之工作:

    $ ./conf /
    _POSIX_OPEN_MAX defined to be 20
    no symbol for OPEN_MAX
    sysconf (_SC_OPEN_MAX) = 1024
    _POSIX_NAME_MAX defined to be 14
    NAME_MAX defined to be 255
    pathconf (_PC_NAME_MAX) = 255
    

    为方便工具灵活的处理各种不同输入,之样直接写死常量肯定是不灵活了,有的同学已经想到了将常量作为命令行参数传入,这个办法也可以。不过这里借鉴书上一种使用 awk 自动生成 c 代码的方法,将上面的例子 awk 化:

    conf.awk

      1 #! /bin/awk -f
      2 BEGIN {
      3 printf("#define _GNU_SOURCE  
    ")
      4 printf("#include "../apue.h" 
    ")
      5 printf("#include <errno.h>
    ")
      6 printf("#include <limits.h> 
    ")
      7 printf("#include <sys/param.h> 
    ")
      8 printf("
    ")
      9 printf("static void pr_sysconf (char*, int); 
    ")
     10 printf("static void pr_pathconf (char *, char *, int); 
    ")
     11 printf("
    ")
     12 printf("int 
    ")
     13 printf("main (int argc, char *argv[])
    ")
     14 printf("{
    ")
     15 printf("  if (argc != 2)
    ")
     16 printf("    err_quit ("usage: conf <dirname>"); 
    ")
     17 printf("
    ")
     18 FS=":"
     19 while (getline < "sysconf.sym" > 0) {
     20 printf("#ifdef %s
    ", $1)
     21 printf("  printf ("%s defined to be %%d\n", %s+0); 
    ", $1, $1)
     22 printf("#else 
    ")
     23 printf("  printf ("no symbol for %s\n"); 
    ", $1)
     24 printf("#endif 
    ")
     25 printf("
    ")
     26 printf("#ifdef _%s
    ", $1)
     27 printf("  printf ("_%s defined to be %%d\n", _%s+0); 
    ", $1, $1)
     28 printf("#else 
    ")
     29 printf("  printf ("no symbol for _%s\n"); 
    ", $1)
     30 printf("#endif 
    ")
     31 printf("
    ")
     32 printf("#ifdef _POSIX_%s
    ", $1)
     33 printf("  printf ("_POSIX_%s defined to be %%d\n", _POSIX_%s+0); 
    ", $1, $1)
     34 printf("#else 
    ")
     35 printf("  printf ("no symbol for _POSIX_%s\n"); 
    ", $1)
     36 printf("#endif 
    ")
     37 printf("
    ")
     38 printf("#ifdef P%s
    ", $1)
     39 printf("  printf ("P%s defined to be %%d\n", P%s+0); 
    ", $1, $1)
     40 printf("#else 
    ")
     41 printf("  printf ("no symbol for P%s\n"); 
    ", $1)
     42 printf("#endif 
    ")
     43 printf("
    ")
     44 printf("#ifdef _SC_%s
    ", $1)
     45 printf("  pr_sysconf ("sysconf (_SC_%s) = ", _SC_%s); 
    ", $1, $1)
     46 printf("#else 
    ")
     47 printf("  printf ("no symbol for _SC_%s\n"); 
    ", $1)
     48 printf("#endif 
    ")
     49 printf("printf ("\n"); 
    ")
     50 printf("
    ")
     51 }
     52 close ("sysconf.sym")
     53 while (getline < "pathconf.sym" > 0) {
     54 printf("#ifdef %s
    ", $1)
     55 printf("  printf ("%s defined to be %%d\n", %s+0); 
    ", $1, $1)
     56 printf("#else 
    ")
     57 printf("  printf ("no symbol for %s\n"); 
    ", $1)
     58 printf("#endif 
    ")
     59 printf("
    ")
     60 printf("#ifdef _%s
    ", $1)
     61 printf("  printf ("_%s defined to be %%d\n", _%s+0); 
    ", $1, $1)
     62 printf("#else 
    ")
     63 printf("  printf ("no symbol for _%s\n"); 
    ", $1)
     64 printf("#endif 
    ")
     65 printf("
    ")
     66 printf("#ifdef _POSIX_%s
    ", $1)
     67 printf("  printf ("_POSIX_%s defined to be %%d\n", _POSIX_%s+0); 
    ", $1, $1)
     68 printf("#else 
    ")
     69 printf("  printf ("no symbol for _POSIX_%s\n"); 
    ", $1)
     70 printf("#endif 
    ")
     71 printf("
    ")
     72 printf("#ifdef _PC_%s
    ", $1)
     73 printf("  pr_pathconf ("pathconf (_PC_%s) = ", argv[1], _PC_%s); 
    ", $1, $1)
     74 printf("#else 
    ")
     75 printf("  printf ("no symbol for _PC_%s\n"); 
    ", $1)
     76 printf("#endif 
    ")
     77 printf("printf ("\n"); 
    ")
     78 printf("
    ")
     79 }
     80 close ("pathconf.sym"); 
     81 exit
     82 }
     83 END {
     84 printf("  exit (0); 
    ")
     85 printf("}
    ")
     86 printf("
    ")
     87 printf("static void 
    ")
     88 printf("pr_sysconf (char *msg, int name) 
    ")
     89 printf("{
    ")
     90 printf("  long val; 
    ")
     91 printf("  fputs (msg, stdout); 
    ")
     92 printf("  errno = 0; 
    ")
     93 printf("  if ((val = sysconf (name)) < 0) { 
    ")
     94 printf("    if (errno != 0) { 
    ")
     95 printf("      if (errno == EINVAL)
    ")
     96 printf("        fputs ("(not supported)\n", stdout); 
    ")
     97 printf("      else 
    ")
     98 printf("        err_sys ("sysconf error"); 
    ")
     99 printf("    }
    ")
    100 printf("    else
    ")
    101 printf("      fputs ("(no limit)\n", stdout); 
    ")
    102 printf("  }
    ")
    103 printf("  else
    ")
    104 printf("    printf ("%%ld\n", val); 
    ")
    105 printf("}
    ")
    106 printf("
    ")
    107 printf("
    ")
    108 printf("static void 
    ")
    109 printf("pr_pathconf (char *msg, char *path, int name) 
    ")
    110 printf("{
    ")
    111 printf("  long val; 
    ")
    112 printf("  fputs (msg, stdout); 
    ")
    113 printf("  errno = 0; 
    ")
    114 printf("  if ((val = pathconf (path, name)) < 0) { 
    ")
    115 printf("    if (errno != 0) { 
    ")
    116 printf("      if (errno == EINVAL)
    ")
    117 printf("        fputs ("(not supported)\n", stdout); 
    ")
    118 printf("      else 
    ")
    119 printf("        err_sys ("pathconf error, path = %%s", path); 
    ")
    120 printf("    }
    ")
    121 printf("    else
    ")
    122 printf("      fputs ("(no limit)\n", stdout); 
    ")
    123 printf("  }
    ")
    124 printf("  else
    ")
    125 printf("    printf ("%%ld\n", val); 
    ")
    126 printf("}
    ")
    127 }

    其实原理很简单啦,就是把每一行都用 awk printf 来生成,只是针对常量部分,使用一个循环,分别从文件中读取常量来进行动态生成。这里需要提供两个文件: sysconf.sym 与 pathconf.sym,分别对应不依赖文件系统的常量与依赖文件系统的常量,因为最后它们的调用方法不同,之前已经说明过了。

    sysconf.sym

    ARG_MAX
    ATEXIT_MAX
    CHILD_MAX
    CLK_TCK
    CLOCKS_PER_SEC
    HOST_NAME_MAX
    IOV_MAX
    LOGIN_NAME_MAX
    NGROUPS_MAX
    OPEN_MAX
    PAGESIZE
    PAGE_SIZE
    RE_DUP_MAX
    STREAM_MAX
    SYMLOOP_MAX
    TTY_NAME_MAX
    TZNAME_MAX
    BC_BASE_MAX
    BC_DIM_MAX
    BC_SCALE_MAX
    BC_STRING_MAX
    COLL_WEIGHTS_MAX
    EXPR_NEST_MAX
    LINE_MAX
    POSIX_VERSION
    POSIX_SOURCE
    POSIX_C_SOURCE
    POSIX2_VERSION
    POSIX2_C_DEV
    POSIX2_FORT_DEV
    POSIX2_FORT_RUN
    POSIX2_LOCALEDEF
    POSIX2_SW_DEV
    POSIX_PHYS_PAGES
    POSIX_AVPHYS_PAGES
    V6_ILP32_OFF32
    V6_ILP32_OFFBIG
    V6_LP64_OFF64
    V6_LP64_OFFBIG
    SSIZE_MAX
    CHARCLASS_NAME_MAX
    FOPEN_MAX
    TMP_MAX
    LONG_BIT
    WORD_BIT
    NL_ARGMAX
    NL_LANGMAX
    LANGMAX
    NL_MSGMAX
    MSGMAX
    NL_NMAX
    NMAX
    NL_SETMAX
    SETMAX
    NL_TEXTMAX
    TEXTMAX
    NZERO
    NOFILE
    NFILE
    JOB_CONTROL
    READER_WRITER_LOCKS
    SAVED_IDS
    SHELL
    VERSION
    GETPW_R_SIZE_MAX
    GETGR_R_SIZE_MAX
    PASS_MAX
    THREAD_DESTRUCTOR_ITERATIONS
    THREAD_KEYS_MAX
    THREAD_STACK_MIN
    THREAD_THREADS_MAX
    THREAD_SAFE_FUNCTIONS
    ADVISORY_INFO
    ASYNCHRONOUS_IO
    BARRIERS
    CPUTIME
    CLOCK_SELECTION
    FSYNC
    IPV6
    MAPPED_FILES
    MEMLOCK
    MEMLOCK_RANGE
    MONOTONIC_CLOCK
    MEMORY_PROTECTION
    MESSAGE_PASSING
    PRIORITIZED_IO
    PRIORITIZED_SCHEDULING
    RAW_SOCKETS
    REALTIME_SIGNALS
    SEMAPHORES
    SHARED_MEMORY_OBJECTS
    SYNCHRONIZED_IO
    SPIN_LOCKS
    SPAWN
    SPORADIC_SERVER
    THREAD_CPUTIME
    TRACE
    TRACE_INHERIT
    TRACE_LOG
    TRACE_EVENT_FILTER
    THREADS
    THREAD_PRIO_INHERIT
    THREAD_PRIO_PROTECT
    THREAD_PRIORITY_SCHEDULING
    THREAD_ATTR_STACKADDR
    THREAD_SAFE_FUNCTIONS
    THREAD_PROCESS_SHARED
    THREAD_SPORADIC_SERVER
    THREAD_ATTR_STACKSIZE
    TYPED_MEMORY_OBJECTS
    XOPEN_SOURCE
    XOPEN_UNIX
    XOPEN_STREAMS
    XOPEN_CRYPE
    XOPEN_REALTIME
    XOPEN_REALTIME_THREADS
    XOPEN_LEGACY
    XOPEN_VERSION
    XOPEN_IOV_MAX
    XOPEN_NAME_MAX
    XOPEN_PATH_MAX
    FILENAME_MAX
    __STD_C__
    _STRICT_ANSI_
    _ISOC99_SOURCE
    _BSD_SOURCE
    _SVID_SOURCE
    _GNU_SOURCE
    

    pathconf.sym

    FILESIZEBITS
    LINK_MAX
    MAX_CANON
    MAX_INPUT
    NAME_MAX
    PATH_MAX
    PIPE_BUF
    SYMLINK_MAX
    CHOWN_RESTRICTED
    NO_TRUNC
    VDISABLE
    

    与书上不同,这里没有让用户分别提供常量的各个名称,以 OPEN_MAX 为例,书上的 sym 文件内容是 ”OPEN_MAX    _PC_OPEN_MAX“ 为一行内容,分别指定常量的编译期名称与运行期查询名称。这里感觉有些啰嗦,直接让用户提供一个原始名称 OPEN_MAX,然后我在 awk 脚本里做了一些处理,去拼接生成各种名称。例如还以 OPEN_MAX 为例,它会尝试以下名称:

    • OPEN_MAX  (原名称)
    • _OPEN_MAX  (_XXX)
    • _POSIX_OPEN_MAX  (_POSIX_XXX)
    • POPEN_MAX  (PXXX)
    • _PC_OPEN_MAX  (_PC_XXX)

    主要起作用的规则是第 1 个与第 3 个,第 2 个规则对于形如 XOPEN_UNIX 的常量有用 (同时存在 _XOPEN_UNIX 与 _PC_XOPEN_UNIX);第 4 个规则对于形如  THREAD_KEYS_MAX 的常量有用 (同时存在 _POSIX_THREAD_KEYS_MAX / PTHREAD_KEYS_MAX / _PC_THREAD_KEYS_MAX);最后一个规则对于 pathconf.sym 而言是 _PC_XXX。

    有了这个代码模板和常量定义文件之后,就可以通过 Makefile 将它们串在一起啦:

    Makefile

     1 all: conf
     2 
     3 conf: conf.o apue.o
     4     gcc -Wall -g $^ -o $@
     5 
     6 conf.o: conf.c ../apue.h
     7     gcc -Wall -g -c $< -o $@
     8 
     9 conf.c: conf.awk sysconf.sym pathconf.sym
    10     ./$^ > $@
    11 
    12 apue.o: ../apue.c ../apue.h 
    13     gcc -Wall -g -c $< -o $@
    14 
    15 clean: 
    16     @echo "start clean..."
    17     -rm -f *.o core.* *.log *~ *.swp conf conf.c
    18     @echo "end clean"
    19 
    20 .PHONY: clean

    这样每次修改 sym 文件后,直接 make 就可以将新的常量包含进去了。下面是运行效果:

    [yunhai@localhost 01.chapter]$ ./conf /
    no symbol for ARG_MAX
    no symbol for _ARG_MAX
    _POSIX_ARG_MAX defined to be 4096
    no symbol for PARG_MAX
    sysconf (_SC_ARG_MAX) = 2621440
    
    no symbol for ATEXIT_MAX
    no symbol for _ATEXIT_MAX
    no symbol for _POSIX_ATEXIT_MAX
    no symbol for PATEXIT_MAX
    sysconf (_SC_ATEXIT_MAX) = 2147483647
    
    no symbol for CHILD_MAX
    no symbol for _CHILD_MAX
    _POSIX_CHILD_MAX defined to be 25
    no symbol for PCHILD_MAX
    sysconf (_SC_CHILD_MAX) = 1024
    
    no symbol for CLK_TCK
    no symbol for _CLK_TCK
    no symbol for _POSIX_CLK_TCK
    no symbol for PCLK_TCK
    sysconf (_SC_CLK_TCK) = 100
    
    no symbol for CLOCKS_PER_SEC
    no symbol for _CLOCKS_PER_SEC
    no symbol for _POSIX_CLOCKS_PER_SEC
    no symbol for PCLOCKS_PER_SEC
    no symbol for _SC_CLOCKS_PER_SEC
    
    HOST_NAME_MAX defined to be 64
    no symbol for _HOST_NAME_MAX
    _POSIX_HOST_NAME_MAX defined to be 255
    no symbol for PHOST_NAME_MAX
    sysconf (_SC_HOST_NAME_MAX) = 64
    
    IOV_MAX defined to be 1024
    no symbol for _IOV_MAX
    no symbol for _POSIX_IOV_MAX
    no symbol for PIOV_MAX
    sysconf (_SC_IOV_MAX) = 1024
    
    LOGIN_NAME_MAX defined to be 256
    no symbol for _LOGIN_NAME_MAX
    _POSIX_LOGIN_NAME_MAX defined to be 9
    no symbol for PLOGIN_NAME_MAX
    sysconf (_SC_LOGIN_NAME_MAX) = 256
    
    NGROUPS_MAX defined to be 65536
    no symbol for _NGROUPS_MAX
    _POSIX_NGROUPS_MAX defined to be 8
    no symbol for PNGROUPS_MAX
    sysconf (_SC_NGROUPS_MAX) = 65536
    
    no symbol for OPEN_MAX
    no symbol for _OPEN_MAX
    _POSIX_OPEN_MAX defined to be 20
    no symbol for POPEN_MAX
    sysconf (_SC_OPEN_MAX) = 1024
    
    no symbol for PAGESIZE
    no symbol for _PAGESIZE
    no symbol for _POSIX_PAGESIZE
    no symbol for PPAGESIZE
    sysconf (_SC_PAGESIZE) = 4096
    
    no symbol for PAGE_SIZE
    no symbol for _PAGE_SIZE
    no symbol for _POSIX_PAGE_SIZE
    no symbol for PPAGE_SIZE
    sysconf (_SC_PAGE_SIZE) = 4096
    
    RE_DUP_MAX defined to be 32767
    no symbol for _RE_DUP_MAX
    _POSIX_RE_DUP_MAX defined to be 255
    no symbol for PRE_DUP_MAX
    sysconf (_SC_RE_DUP_MAX) = 32767
    
    no symbol for STREAM_MAX
    no symbol for _STREAM_MAX
    _POSIX_STREAM_MAX defined to be 8
    no symbol for PSTREAM_MAX
    sysconf (_SC_STREAM_MAX) = 16
    
    no symbol for SYMLOOP_MAX
    no symbol for _SYMLOOP_MAX
    _POSIX_SYMLOOP_MAX defined to be 8
    no symbol for PSYMLOOP_MAX
    sysconf (_SC_SYMLOOP_MAX) = (no limit)
    
    TTY_NAME_MAX defined to be 32
    no symbol for _TTY_NAME_MAX
    _POSIX_TTY_NAME_MAX defined to be 9
    no symbol for PTTY_NAME_MAX
    sysconf (_SC_TTY_NAME_MAX) = 32
    
    no symbol for TZNAME_MAX
    no symbol for _TZNAME_MAX
    _POSIX_TZNAME_MAX defined to be 6
    no symbol for PTZNAME_MAX
    sysconf (_SC_TZNAME_MAX) = 6
    
    BC_BASE_MAX defined to be 99
    no symbol for _BC_BASE_MAX
    no symbol for _POSIX_BC_BASE_MAX
    no symbol for PBC_BASE_MAX
    sysconf (_SC_BC_BASE_MAX) = 99
    
    BC_DIM_MAX defined to be 2048
    no symbol for _BC_DIM_MAX
    no symbol for _POSIX_BC_DIM_MAX
    no symbol for PBC_DIM_MAX
    sysconf (_SC_BC_DIM_MAX) = 2048
    
    BC_SCALE_MAX defined to be 99
    no symbol for _BC_SCALE_MAX
    no symbol for _POSIX_BC_SCALE_MAX
    no symbol for PBC_SCALE_MAX
    sysconf (_SC_BC_SCALE_MAX) = 99
    
    BC_STRING_MAX defined to be 1000
    no symbol for _BC_STRING_MAX
    no symbol for _POSIX_BC_STRING_MAX
    no symbol for PBC_STRING_MAX
    sysconf (_SC_BC_STRING_MAX) = 1000
    
    COLL_WEIGHTS_MAX defined to be 255
    no symbol for _COLL_WEIGHTS_MAX
    no symbol for _POSIX_COLL_WEIGHTS_MAX
    no symbol for PCOLL_WEIGHTS_MAX
    sysconf (_SC_COLL_WEIGHTS_MAX) = 255
    
    EXPR_NEST_MAX defined to be 32
    no symbol for _EXPR_NEST_MAX
    no symbol for _POSIX_EXPR_NEST_MAX
    no symbol for PEXPR_NEST_MAX
    sysconf (_SC_EXPR_NEST_MAX) = 32
    
    LINE_MAX defined to be 2048
    no symbol for _LINE_MAX
    no symbol for _POSIX_LINE_MAX
    no symbol for PLINE_MAX
    sysconf (_SC_LINE_MAX) = 2048
    
    no symbol for POSIX_VERSION
    _POSIX_VERSION defined to be 200809
    no symbol for _POSIX_POSIX_VERSION
    no symbol for PPOSIX_VERSION
    no symbol for _SC_POSIX_VERSION
    
    no symbol for POSIX_SOURCE
    _POSIX_SOURCE defined to be 1
    no symbol for _POSIX_POSIX_SOURCE
    no symbol for PPOSIX_SOURCE
    no symbol for _SC_POSIX_SOURCE
    
    no symbol for POSIX_C_SOURCE
    _POSIX_C_SOURCE defined to be 200809
    no symbol for _POSIX_POSIX_C_SOURCE
    no symbol for PPOSIX_C_SOURCE
    no symbol for _SC_POSIX_C_SOURCE
    
    no symbol for POSIX2_VERSION
    _POSIX2_VERSION defined to be 200809
    no symbol for _POSIX_POSIX2_VERSION
    no symbol for PPOSIX2_VERSION
    no symbol for _SC_POSIX2_VERSION
    
    no symbol for POSIX2_C_DEV
    _POSIX2_C_DEV defined to be 200809
    no symbol for _POSIX_POSIX2_C_DEV
    no symbol for PPOSIX2_C_DEV
    no symbol for _SC_POSIX2_C_DEV
    
    no symbol for POSIX2_FORT_DEV
    no symbol for _POSIX2_FORT_DEV
    no symbol for _POSIX_POSIX2_FORT_DEV
    no symbol for PPOSIX2_FORT_DEV
    no symbol for _SC_POSIX2_FORT_DEV
    
    no symbol for POSIX2_FORT_RUN
    no symbol for _POSIX2_FORT_RUN
    no symbol for _POSIX_POSIX2_FORT_RUN
    no symbol for PPOSIX2_FORT_RUN
    no symbol for _SC_POSIX2_FORT_RUN
    
    no symbol for POSIX2_LOCALEDEF
    _POSIX2_LOCALEDEF defined to be 200809
    no symbol for _POSIX_POSIX2_LOCALEDEF
    no symbol for PPOSIX2_LOCALEDEF
    no symbol for _SC_POSIX2_LOCALEDEF
    
    no symbol for POSIX2_SW_DEV
    _POSIX2_SW_DEV defined to be 200809
    no symbol for _POSIX_POSIX2_SW_DEV
    no symbol for PPOSIX2_SW_DEV
    no symbol for _SC_POSIX2_SW_DEV
    
    no symbol for POSIX_PHYS_PAGES
    no symbol for _POSIX_PHYS_PAGES
    no symbol for _POSIX_POSIX_PHYS_PAGES
    no symbol for PPOSIX_PHYS_PAGES
    no symbol for _SC_POSIX_PHYS_PAGES
    
    no symbol for POSIX_AVPHYS_PAGES
    no symbol for _POSIX_AVPHYS_PAGES
    no symbol for _POSIX_POSIX_AVPHYS_PAGES
    no symbol for PPOSIX_AVPHYS_PAGES
    no symbol for _SC_POSIX_AVPHYS_PAGES
    
    no symbol for V6_ILP32_OFF32
    no symbol for _V6_ILP32_OFF32
    _POSIX_V6_ILP32_OFF32 defined to be 1
    no symbol for PV6_ILP32_OFF32
    sysconf (_SC_V6_ILP32_OFF32) = 1
    
    no symbol for V6_ILP32_OFFBIG
    no symbol for _V6_ILP32_OFFBIG
    _POSIX_V6_ILP32_OFFBIG defined to be 1
    no symbol for PV6_ILP32_OFFBIG
    sysconf (_SC_V6_ILP32_OFFBIG) = 1
    
    no symbol for V6_LP64_OFF64
    no symbol for _V6_LP64_OFF64
    no symbol for _POSIX_V6_LP64_OFF64
    no symbol for PV6_LP64_OFF64
    sysconf (_SC_V6_LP64_OFF64) = (no limit)
    
    no symbol for V6_LP64_OFFBIG
    no symbol for _V6_LP64_OFFBIG
    no symbol for _POSIX_V6_LP64_OFFBIG
    no symbol for PV6_LP64_OFFBIG
    no symbol for _SC_V6_LP64_OFFBIG
    
    SSIZE_MAX defined to be 2147483647
    no symbol for _SSIZE_MAX
    _POSIX_SSIZE_MAX defined to be 32767
    no symbol for PSSIZE_MAX
    sysconf (_SC_SSIZE_MAX) = 32767
    
    CHARCLASS_NAME_MAX defined to be 2048
    no symbol for _CHARCLASS_NAME_MAX
    no symbol for _POSIX_CHARCLASS_NAME_MAX
    no symbol for PCHARCLASS_NAME_MAX
    sysconf (_SC_CHARCLASS_NAME_MAX) = 2048
    
    FOPEN_MAX defined to be 16
    no symbol for _FOPEN_MAX
    no symbol for _POSIX_FOPEN_MAX
    no symbol for PFOPEN_MAX
    no symbol for _SC_FOPEN_MAX
    
    TMP_MAX defined to be 238328
    no symbol for _TMP_MAX
    no symbol for _POSIX_TMP_MAX
    no symbol for PTMP_MAX
    no symbol for _SC_TMP_MAX
    
    LONG_BIT defined to be 32
    no symbol for _LONG_BIT
    no symbol for _POSIX_LONG_BIT
    no symbol for PLONG_BIT
    sysconf (_SC_LONG_BIT) = 32
    
    WORD_BIT defined to be 32
    no symbol for _WORD_BIT
    no symbol for _POSIX_WORD_BIT
    no symbol for PWORD_BIT
    sysconf (_SC_WORD_BIT) = 32
    
    NL_ARGMAX defined to be 4096
    no symbol for _NL_ARGMAX
    no symbol for _POSIX_NL_ARGMAX
    no symbol for PNL_ARGMAX
    sysconf (_SC_NL_ARGMAX) = 4096
    
    NL_LANGMAX defined to be 2048
    no symbol for _NL_LANGMAX
    no symbol for _POSIX_NL_LANGMAX
    no symbol for PNL_LANGMAX
    sysconf (_SC_NL_LANGMAX) = 2048
    
    no symbol for LANGMAX
    no symbol for _LANGMAX
    no symbol for _POSIX_LANGMAX
    no symbol for PLANGMAX
    no symbol for _SC_LANGMAX
    
    NL_MSGMAX defined to be 2147483647
    no symbol for _NL_MSGMAX
    no symbol for _POSIX_NL_MSGMAX
    no symbol for PNL_MSGMAX
    sysconf (_SC_NL_MSGMAX) = 2147483647
    
    no symbol for MSGMAX
    no symbol for _MSGMAX
    no symbol for _POSIX_MSGMAX
    no symbol for PMSGMAX
    no symbol for _SC_MSGMAX
    
    NL_NMAX defined to be 2147483647
    no symbol for _NL_NMAX
    no symbol for _POSIX_NL_NMAX
    no symbol for PNL_NMAX
    sysconf (_SC_NL_NMAX) = 2147483647
    
    no symbol for NMAX
    no symbol for _NMAX
    no symbol for _POSIX_NMAX
    no symbol for PNMAX
    no symbol for _SC_NMAX
    
    NL_SETMAX defined to be 2147483647
    no symbol for _NL_SETMAX
    no symbol for _POSIX_NL_SETMAX
    no symbol for PNL_SETMAX
    sysconf (_SC_NL_SETMAX) = 2147483647
    
    no symbol for SETMAX
    no symbol for _SETMAX
    no symbol for _POSIX_SETMAX
    no symbol for PSETMAX
    no symbol for _SC_SETMAX
    
    NL_TEXTMAX defined to be 2147483647
    no symbol for _NL_TEXTMAX
    no symbol for _POSIX_NL_TEXTMAX
    no symbol for PNL_TEXTMAX
    sysconf (_SC_NL_TEXTMAX) = 2147483647
    
    no symbol for TEXTMAX
    no symbol for _TEXTMAX
    no symbol for _POSIX_TEXTMAX
    no symbol for PTEXTMAX
    no symbol for _SC_TEXTMAX
    
    NZERO defined to be 20
    no symbol for _NZERO
    no symbol for _POSIX_NZERO
    no symbol for PNZERO
    sysconf (_SC_NZERO) = 20
    
    NOFILE defined to be 256
    no symbol for _NOFILE
    no symbol for _POSIX_NOFILE
    no symbol for PNOFILE
    no symbol for _SC_NOFILE
    
    no symbol for NFILE
    no symbol for _NFILE
    no symbol for _POSIX_NFILE
    no symbol for PNFILE
    no symbol for _SC_NFILE
    
    no symbol for JOB_CONTROL
    no symbol for _JOB_CONTROL
    _POSIX_JOB_CONTROL defined to be 1
    no symbol for PJOB_CONTROL
    sysconf (_SC_JOB_CONTROL) = 1
    
    no symbol for READER_WRITER_LOCKS
    no symbol for _READER_WRITER_LOCKS
    _POSIX_READER_WRITER_LOCKS defined to be 200809
    no symbol for PREADER_WRITER_LOCKS
    sysconf (_SC_READER_WRITER_LOCKS) = 200809
    
    no symbol for SAVED_IDS
    no symbol for _SAVED_IDS
    _POSIX_SAVED_IDS defined to be 1
    no symbol for PSAVED_IDS
    sysconf (_SC_SAVED_IDS) = 1
    
    no symbol for SHELL
    no symbol for _SHELL
    _POSIX_SHELL defined to be 1
    no symbol for PSHELL
    sysconf (_SC_SHELL) = 1
    
    no symbol for VERSION
    no symbol for _VERSION
    _POSIX_VERSION defined to be 200809
    no symbol for PVERSION
    sysconf (_SC_VERSION) = 200809
    
    no symbol for GETPW_R_SIZE_MAX
    no symbol for _GETPW_R_SIZE_MAX
    no symbol for _POSIX_GETPW_R_SIZE_MAX
    no symbol for PGETPW_R_SIZE_MAX
    sysconf (_SC_GETPW_R_SIZE_MAX) = 1024
    
    no symbol for GETGR_R_SIZE_MAX
    no symbol for _GETGR_R_SIZE_MAX
    no symbol for _POSIX_GETGR_R_SIZE_MAX
    no symbol for PGETGR_R_SIZE_MAX
    sysconf (_SC_GETGR_R_SIZE_MAX) = 1024
    
    no symbol for PASS_MAX
    no symbol for _PASS_MAX
    no symbol for _POSIX_PASS_MAX
    no symbol for PPASS_MAX
    sysconf (_SC_PASS_MAX) = 8192
    
    no symbol for THREAD_DESTRUCTOR_ITERATIONS
    no symbol for _THREAD_DESTRUCTOR_ITERATIONS
    _POSIX_THREAD_DESTRUCTOR_ITERATIONS defined to be 4
    PTHREAD_DESTRUCTOR_ITERATIONS defined to be 4
    sysconf (_SC_THREAD_DESTRUCTOR_ITERATIONS) = 4
    
    no symbol for THREAD_KEYS_MAX
    no symbol for _THREAD_KEYS_MAX
    _POSIX_THREAD_KEYS_MAX defined to be 128
    PTHREAD_KEYS_MAX defined to be 1024
    sysconf (_SC_THREAD_KEYS_MAX) = 1024
    
    no symbol for THREAD_STACK_MIN
    no symbol for _THREAD_STACK_MIN
    no symbol for _POSIX_THREAD_STACK_MIN
    PTHREAD_STACK_MIN defined to be 16384
    sysconf (_SC_THREAD_STACK_MIN) = 16384
    
    no symbol for THREAD_THREADS_MAX
    no symbol for _THREAD_THREADS_MAX
    _POSIX_THREAD_THREADS_MAX defined to be 64
    no symbol for PTHREAD_THREADS_MAX
    sysconf (_SC_THREAD_THREADS_MAX) = (no limit)
    
    no symbol for THREAD_SAFE_FUNCTIONS
    no symbol for _THREAD_SAFE_FUNCTIONS
    _POSIX_THREAD_SAFE_FUNCTIONS defined to be 200809
    no symbol for PTHREAD_SAFE_FUNCTIONS
    sysconf (_SC_THREAD_SAFE_FUNCTIONS) = 200809
    
    no symbol for ADVISORY_INFO
    no symbol for _ADVISORY_INFO
    _POSIX_ADVISORY_INFO defined to be 200809
    no symbol for PADVISORY_INFO
    sysconf (_SC_ADVISORY_INFO) = 200809
    
    no symbol for ASYNCHRONOUS_IO
    no symbol for _ASYNCHRONOUS_IO
    _POSIX_ASYNCHRONOUS_IO defined to be 200809
    no symbol for PASYNCHRONOUS_IO
    sysconf (_SC_ASYNCHRONOUS_IO) = 200809
    
    no symbol for BARRIERS
    no symbol for _BARRIERS
    _POSIX_BARRIERS defined to be 200809
    no symbol for PBARRIERS
    sysconf (_SC_BARRIERS) = 200809
    
    no symbol for CPUTIME
    no symbol for _CPUTIME
    _POSIX_CPUTIME defined to be 0
    no symbol for PCPUTIME
    sysconf (_SC_CPUTIME) = 200809
    
    no symbol for CLOCK_SELECTION
    no symbol for _CLOCK_SELECTION
    _POSIX_CLOCK_SELECTION defined to be 200809
    no symbol for PCLOCK_SELECTION
    sysconf (_SC_CLOCK_SELECTION) = 200809
    
    no symbol for FSYNC
    no symbol for _FSYNC
    _POSIX_FSYNC defined to be 200809
    no symbol for PFSYNC
    sysconf (_SC_FSYNC) = 200809
    
    no symbol for IPV6
    no symbol for _IPV6
    _POSIX_IPV6 defined to be 200809
    no symbol for PIPV6
    sysconf (_SC_IPV6) = 200809
    
    no symbol for MAPPED_FILES
    no symbol for _MAPPED_FILES
    _POSIX_MAPPED_FILES defined to be 200809
    no symbol for PMAPPED_FILES
    sysconf (_SC_MAPPED_FILES) = 200809
    
    no symbol for MEMLOCK
    no symbol for _MEMLOCK
    _POSIX_MEMLOCK defined to be 200809
    no symbol for PMEMLOCK
    sysconf (_SC_MEMLOCK) = 200809
    
    no symbol for MEMLOCK_RANGE
    no symbol for _MEMLOCK_RANGE
    _POSIX_MEMLOCK_RANGE defined to be 200809
    no symbol for PMEMLOCK_RANGE
    sysconf (_SC_MEMLOCK_RANGE) = 200809
    
    no symbol for MONOTONIC_CLOCK
    no symbol for _MONOTONIC_CLOCK
    _POSIX_MONOTONIC_CLOCK defined to be 0
    no symbol for PMONOTONIC_CLOCK
    sysconf (_SC_MONOTONIC_CLOCK) = 200809
    
    no symbol for MEMORY_PROTECTION
    no symbol for _MEMORY_PROTECTION
    _POSIX_MEMORY_PROTECTION defined to be 200809
    no symbol for PMEMORY_PROTECTION
    sysconf (_SC_MEMORY_PROTECTION) = 200809
    
    no symbol for MESSAGE_PASSING
    no symbol for _MESSAGE_PASSING
    _POSIX_MESSAGE_PASSING defined to be 200809
    no symbol for PMESSAGE_PASSING
    sysconf (_SC_MESSAGE_PASSING) = 200809
    
    no symbol for PRIORITIZED_IO
    no symbol for _PRIORITIZED_IO
    _POSIX_PRIORITIZED_IO defined to be 200809
    no symbol for PPRIORITIZED_IO
    sysconf (_SC_PRIORITIZED_IO) = 200809
    
    no symbol for PRIORITIZED_SCHEDULING
    no symbol for _PRIORITIZED_SCHEDULING
    no symbol for _POSIX_PRIORITIZED_SCHEDULING
    no symbol for PPRIORITIZED_SCHEDULING
    no symbol for _SC_PRIORITIZED_SCHEDULING
    
    no symbol for RAW_SOCKETS
    no symbol for _RAW_SOCKETS
    _POSIX_RAW_SOCKETS defined to be 200809
    no symbol for PRAW_SOCKETS
    sysconf (_SC_RAW_SOCKETS) = 200809
    
    no symbol for REALTIME_SIGNALS
    no symbol for _REALTIME_SIGNALS
    _POSIX_REALTIME_SIGNALS defined to be 200809
    no symbol for PREALTIME_SIGNALS
    sysconf (_SC_REALTIME_SIGNALS) = 200809
    
    no symbol for SEMAPHORES
    no symbol for _SEMAPHORES
    _POSIX_SEMAPHORES defined to be 200809
    no symbol for PSEMAPHORES
    sysconf (_SC_SEMAPHORES) = 200809
    
    no symbol for SHARED_MEMORY_OBJECTS
    no symbol for _SHARED_MEMORY_OBJECTS
    _POSIX_SHARED_MEMORY_OBJECTS defined to be 200809
    no symbol for PSHARED_MEMORY_OBJECTS
    sysconf (_SC_SHARED_MEMORY_OBJECTS) = 200809
    
    no symbol for SYNCHRONIZED_IO
    no symbol for _SYNCHRONIZED_IO
    _POSIX_SYNCHRONIZED_IO defined to be 200809
    no symbol for PSYNCHRONIZED_IO
    sysconf (_SC_SYNCHRONIZED_IO) = 200809
    
    no symbol for SPIN_LOCKS
    no symbol for _SPIN_LOCKS
    _POSIX_SPIN_LOCKS defined to be 200809
    no symbol for PSPIN_LOCKS
    sysconf (_SC_SPIN_LOCKS) = 200809
    
    no symbol for SPAWN
    no symbol for _SPAWN
    _POSIX_SPAWN defined to be 200809
    no symbol for PSPAWN
    sysconf (_SC_SPAWN) = 200809
    
    no symbol for SPORADIC_SERVER
    no symbol for _SPORADIC_SERVER
    _POSIX_SPORADIC_SERVER defined to be -1
    no symbol for PSPORADIC_SERVER
    sysconf (_SC_SPORADIC_SERVER) = (no limit)
    
    no symbol for THREAD_CPUTIME
    no symbol for _THREAD_CPUTIME
    _POSIX_THREAD_CPUTIME defined to be 0
    no symbol for PTHREAD_CPUTIME
    sysconf (_SC_THREAD_CPUTIME) = 200809
    
    no symbol for TRACE
    no symbol for _TRACE
    _POSIX_TRACE defined to be -1
    no symbol for PTRACE
    sysconf (_SC_TRACE) = (no limit)
    
    no symbol for TRACE_INHERIT
    no symbol for _TRACE_INHERIT
    _POSIX_TRACE_INHERIT defined to be -1
    no symbol for PTRACE_INHERIT
    sysconf (_SC_TRACE_INHERIT) = (no limit)
    
    no symbol for TRACE_LOG
    no symbol for _TRACE_LOG
    _POSIX_TRACE_LOG defined to be -1
    no symbol for PTRACE_LOG
    sysconf (_SC_TRACE_LOG) = (no limit)
    
    no symbol for TRACE_EVENT_FILTER
    no symbol for _TRACE_EVENT_FILTER
    _POSIX_TRACE_EVENT_FILTER defined to be -1
    no symbol for PTRACE_EVENT_FILTER
    sysconf (_SC_TRACE_EVENT_FILTER) = (no limit)
    
    no symbol for THREADS
    no symbol for _THREADS
    _POSIX_THREADS defined to be 200809
    no symbol for PTHREADS
    sysconf (_SC_THREADS) = 200809
    
    no symbol for THREAD_PRIO_INHERIT
    no symbol for _THREAD_PRIO_INHERIT
    _POSIX_THREAD_PRIO_INHERIT defined to be 200809
    no symbol for PTHREAD_PRIO_INHERIT
    sysconf (_SC_THREAD_PRIO_INHERIT) = 200809
    
    no symbol for THREAD_PRIO_PROTECT
    no symbol for _THREAD_PRIO_PROTECT
    _POSIX_THREAD_PRIO_PROTECT defined to be 200809
    no symbol for PTHREAD_PRIO_PROTECT
    sysconf (_SC_THREAD_PRIO_PROTECT) = 200809
    
    no symbol for THREAD_PRIORITY_SCHEDULING
    no symbol for _THREAD_PRIORITY_SCHEDULING
    _POSIX_THREAD_PRIORITY_SCHEDULING defined to be 200809
    no symbol for PTHREAD_PRIORITY_SCHEDULING
    sysconf (_SC_THREAD_PRIORITY_SCHEDULING) = 200809
    
    no symbol for THREAD_ATTR_STACKADDR
    no symbol for _THREAD_ATTR_STACKADDR
    _POSIX_THREAD_ATTR_STACKADDR defined to be 200809
    no symbol for PTHREAD_ATTR_STACKADDR
    sysconf (_SC_THREAD_ATTR_STACKADDR) = 200809
    
    no symbol for THREAD_SAFE_FUNCTIONS
    no symbol for _THREAD_SAFE_FUNCTIONS
    _POSIX_THREAD_SAFE_FUNCTIONS defined to be 200809
    no symbol for PTHREAD_SAFE_FUNCTIONS
    sysconf (_SC_THREAD_SAFE_FUNCTIONS) = 200809
    
    no symbol for THREAD_PROCESS_SHARED
    no symbol for _THREAD_PROCESS_SHARED
    _POSIX_THREAD_PROCESS_SHARED defined to be 200809
    no symbol for PTHREAD_PROCESS_SHARED
    sysconf (_SC_THREAD_PROCESS_SHARED) = 200809
    
    no symbol for THREAD_SPORADIC_SERVER
    no symbol for _THREAD_SPORADIC_SERVER
    _POSIX_THREAD_SPORADIC_SERVER defined to be -1
    no symbol for PTHREAD_SPORADIC_SERVER
    sysconf (_SC_THREAD_SPORADIC_SERVER) = (no limit)
    
    no symbol for THREAD_ATTR_STACKSIZE
    no symbol for _THREAD_ATTR_STACKSIZE
    _POSIX_THREAD_ATTR_STACKSIZE defined to be 200809
    no symbol for PTHREAD_ATTR_STACKSIZE
    sysconf (_SC_THREAD_ATTR_STACKSIZE) = 200809
    
    no symbol for TYPED_MEMORY_OBJECTS
    no symbol for _TYPED_MEMORY_OBJECTS
    _POSIX_TYPED_MEMORY_OBJECTS defined to be -1
    no symbol for PTYPED_MEMORY_OBJECTS
    sysconf (_SC_TYPED_MEMORY_OBJECTS) = (no limit)
    
    no symbol for XOPEN_SOURCE
    _XOPEN_SOURCE defined to be 700
    no symbol for _POSIX_XOPEN_SOURCE
    no symbol for PXOPEN_SOURCE
    no symbol for _SC_XOPEN_SOURCE
    
    no symbol for XOPEN_UNIX
    _XOPEN_UNIX defined to be 1
    no symbol for _POSIX_XOPEN_UNIX
    no symbol for PXOPEN_UNIX
    sysconf (_SC_XOPEN_UNIX) = 1
    
    no symbol for XOPEN_STREAMS
    _XOPEN_STREAMS defined to be -1
    no symbol for _POSIX_XOPEN_STREAMS
    no symbol for PXOPEN_STREAMS
    sysconf (_SC_XOPEN_STREAMS) = (no limit)
    
    no symbol for XOPEN_CRYPE
    no symbol for _XOPEN_CRYPE
    no symbol for _POSIX_XOPEN_CRYPE
    no symbol for PXOPEN_CRYPE
    no symbol for _SC_XOPEN_CRYPE
    
    no symbol for XOPEN_REALTIME
    _XOPEN_REALTIME defined to be 1
    no symbol for _POSIX_XOPEN_REALTIME
    no symbol for PXOPEN_REALTIME
    sysconf (_SC_XOPEN_REALTIME) = 1
    
    no symbol for XOPEN_REALTIME_THREADS
    _XOPEN_REALTIME_THREADS defined to be 1
    no symbol for _POSIX_XOPEN_REALTIME_THREADS
    no symbol for PXOPEN_REALTIME_THREADS
    sysconf (_SC_XOPEN_REALTIME_THREADS) = 1
    
    no symbol for XOPEN_LEGACY
    _XOPEN_LEGACY defined to be 1
    no symbol for _POSIX_XOPEN_LEGACY
    no symbol for PXOPEN_LEGACY
    sysconf (_SC_XOPEN_LEGACY) = 1
    
    no symbol for XOPEN_VERSION
    _XOPEN_VERSION defined to be 700
    no symbol for _POSIX_XOPEN_VERSION
    no symbol for PXOPEN_VERSION
    sysconf (_SC_XOPEN_VERSION) = 700
    
    no symbol for XOPEN_IOV_MAX
    _XOPEN_IOV_MAX defined to be 16
    no symbol for _POSIX_XOPEN_IOV_MAX
    no symbol for PXOPEN_IOV_MAX
    no symbol for _SC_XOPEN_IOV_MAX
    
    no symbol for XOPEN_NAME_MAX
    no symbol for _XOPEN_NAME_MAX
    no symbol for _POSIX_XOPEN_NAME_MAX
    no symbol for PXOPEN_NAME_MAX
    no symbol for _SC_XOPEN_NAME_MAX
    
    no symbol for XOPEN_PATH_MAX
    no symbol for _XOPEN_PATH_MAX
    no symbol for _POSIX_XOPEN_PATH_MAX
    no symbol for PXOPEN_PATH_MAX
    no symbol for _SC_XOPEN_PATH_MAX
    
    FILENAME_MAX defined to be 4096
    no symbol for _FILENAME_MAX
    no symbol for _POSIX_FILENAME_MAX
    no symbol for PFILENAME_MAX
    no symbol for _SC_FILENAME_MAX
    
    no symbol for __STD_C__
    no symbol for ___STD_C__
    no symbol for _POSIX___STD_C__
    no symbol for P__STD_C__
    no symbol for _SC___STD_C__
    
    no symbol for _STRICT_ANSI_
    no symbol for __STRICT_ANSI_
    no symbol for _POSIX__STRICT_ANSI_
    no symbol for P_STRICT_ANSI_
    no symbol for _SC__STRICT_ANSI_
    
    _ISOC99_SOURCE defined to be 1
    no symbol for __ISOC99_SOURCE
    no symbol for _POSIX__ISOC99_SOURCE
    no symbol for P_ISOC99_SOURCE
    no symbol for _SC__ISOC99_SOURCE
    
    _BSD_SOURCE defined to be 1
    no symbol for __BSD_SOURCE
    no symbol for _POSIX__BSD_SOURCE
    no symbol for P_BSD_SOURCE
    no symbol for _SC__BSD_SOURCE
    
    _SVID_SOURCE defined to be 1
    no symbol for __SVID_SOURCE
    no symbol for _POSIX__SVID_SOURCE
    no symbol for P_SVID_SOURCE
    no symbol for _SC__SVID_SOURCE
    
    _GNU_SOURCE defined to be 0
    no symbol for __GNU_SOURCE
    no symbol for _POSIX__GNU_SOURCE
    no symbol for P_GNU_SOURCE
    no symbol for _SC__GNU_SOURCE
    
    no symbol for FILESIZEBITS
    no symbol for _FILESIZEBITS
    no symbol for _POSIX_FILESIZEBITS
    pathconf (_PC_FILESIZEBITS) = 64
    
    no symbol for LINK_MAX
    no symbol for _LINK_MAX
    _POSIX_LINK_MAX defined to be 8
    pathconf (_PC_LINK_MAX) = 32000
    
    MAX_CANON defined to be 255
    no symbol for _MAX_CANON
    _POSIX_MAX_CANON defined to be 255
    pathconf (_PC_MAX_CANON) = 255
    
    MAX_INPUT defined to be 255
    no symbol for _MAX_INPUT
    _POSIX_MAX_INPUT defined to be 255
    pathconf (_PC_MAX_INPUT) = 255
    
    NAME_MAX defined to be 255
    no symbol for _NAME_MAX
    _POSIX_NAME_MAX defined to be 14
    pathconf (_PC_NAME_MAX) = 255
    
    PATH_MAX defined to be 4096
    no symbol for _PATH_MAX
    _POSIX_PATH_MAX defined to be 256
    pathconf (_PC_PATH_MAX) = 4096
    
    PIPE_BUF defined to be 4096
    no symbol for _PIPE_BUF
    _POSIX_PIPE_BUF defined to be 512
    pathconf (_PC_PIPE_BUF) = 4096
    
    no symbol for SYMLINK_MAX
    no symbol for _SYMLINK_MAX
    _POSIX_SYMLINK_MAX defined to be 255
    pathconf (_PC_SYMLINK_MAX) = (no limit)
    
    no symbol for CHOWN_RESTRICTED
    no symbol for _CHOWN_RESTRICTED
    _POSIX_CHOWN_RESTRICTED defined to be 0
    pathconf (_PC_CHOWN_RESTRICTED) = 1
    
    no symbol for NO_TRUNC
    no symbol for _NO_TRUNC
    _POSIX_NO_TRUNC defined to be 1
    pathconf (_PC_NO_TRUNC) = 1
    
    no symbol for VDISABLE
    no symbol for _VDISABLE
    _POSIX_VDISABLE defined to be 0
    pathconf (_PC_VDISABLE) = 0
    

    我运行的环境是 CentOS 6.7,通过 grep 去掉没有定义的常量 (grep -v 'no symbol') 之后,和在另一台机器上 (NeoKylin)上的运行结果做个对比,如下:

    其中 CentOS 是 32 位,而中标麒麟是 64 位。不过好像也看不出来什么很大的差异,而且有些限制通过这样的查询也不一定准确,例如最大打开文件句柄数,很可能就和 ulimit 设置相关,如果想找到确切的限制值的话,建议还是使用 getrlimit 去获取,会更准确一些。

  • 相关阅读:
    rest_framework viewsets.ViewSet 的简单使用
    rest_framework django 简单使用(数据库创建数据, 覆盖数据, 其他的大同小异)
    mysql 初始 密码
    centos python No module named '_bz2'
    shell 中的 if-elif-else 注意点
    CENTOS7下安装REDIS
    centos python安装 No module named '_ctypes'
    编译nginx时struct crypt_data’没有名为‘current_salt’的成员:cd.current_salt[0] = ~salt[0];的解决方案
    centos opencv-python libSM.so.6: cannot open shared object file: No such file or directory
    mysql_config not found
  • 原文地址:https://www.cnblogs.com/goodcitizen/p/13143178.html
Copyright © 2011-2022 走看看