對於在不同 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)
也就是說,要確定一個系統限制,一共分兩步:
- 確定相應的符號常量有沒有在標頭檔案定義,如果有,直接拿來用;
- 如果沒有,走 sysconf 或 pathconf 查詢。
對於系統選項,稍等複雜一點,分三步:
- 符號常量定義為 -1,平臺不支援該選項;
- 符號常量定義大於 0,平臺支援相應的選項;
- 符號常量定義為 0,需要進一步依靠 sysconf 或 pathconf 來查詢。
到這裡,你大概已經想到怎麼自己製作一個工具了,那就是按上面的邏輯 coding 唄,可以把想要查的常量作為輸入,查到的結果列印到控制檯,就像下面這樣:
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\n", _POSIX_OPEN_MAX); 16 #else 17 printf ("no symbol for _POSIX_OPEN_MAX\n"); 18 #endif 19 20 #ifdef OPEN_MAX 21 printf ("OPEN_MAX defined to be %d\n", OPEN_MAX); 22 #else 23 printf ("no symbol for OPEN_MAX\n"); 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\n"); 30 #endif 31 32 #ifdef _POSIX_NAME_MAX 33 printf ("_POSIX_NAME_MAX defined to be %d\n", _POSIX_NAME_MAX); 34 #else 35 printf ("no symbol for _POSIX_NAME_MAX\n"); 36 #endif 37 38 #ifdef NAME_MAX 39 printf ("NAME_MAX defined to be %d\n", NAME_MAX); 40 #else 41 printf ("no symbol for NAME_MAX\n"); 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\n"); 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)\n", stdout); 63 else 64 err_sys ("sysconf error"); 65 } 66 else 67 fputs ("(no limit)\n", stdout); 68 } 69 else 70 printf ("%ld\n", 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)\n", stdout); 84 else 85 err_sys ("pathconf error, path = %s", path); 86 } 87 else 88 fputs ("(no limit)\n", stdout); 89 } 90 else 91 printf ("%ld\n", 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 化:
1 #! /bin/awk -f 2 BEGIN { 3 printf("#define _GNU_SOURCE \n") 4 printf("#include \"../apue.h\" \n") 5 printf("#include <errno.h>\n") 6 printf("#include <limits.h> \n") 7 printf("#include <sys/param.h> \n") 8 printf("\n") 9 printf("static void pr_sysconf (char*, int); \n") 10 printf("static void pr_pathconf (char *, char *, int); \n") 11 printf("\n") 12 printf("int \n") 13 printf("main (int argc, char *argv[])\n") 14 printf("{\n") 15 printf(" if (argc != 2)\n") 16 printf(" err_quit (\"usage: conf <dirname>\"); \n") 17 printf("\n") 18 FS=":" 19 while (getline < "sysconf.sym" > 0) { 20 printf("#ifdef %s\n", $1) 21 printf(" printf (\"%s defined to be %%d\\n\", %s+0); \n", $1, $1) 22 printf("#else \n") 23 printf(" printf (\"no symbol for %s\\n\"); \n", $1) 24 printf("#endif \n") 25 printf("\n") 26 printf("#ifdef _%s\n", $1) 27 printf(" printf (\"_%s defined to be %%d\\n\", _%s+0); \n", $1, $1) 28 printf("#else \n") 29 printf(" printf (\"no symbol for _%s\\n\"); \n", $1) 30 printf("#endif \n") 31 printf("\n") 32 printf("#ifdef _POSIX_%s\n", $1) 33 printf(" printf (\"_POSIX_%s defined to be %%d\\n\", _POSIX_%s+0); \n", $1, $1) 34 printf("#else \n") 35 printf(" printf (\"no symbol for _POSIX_%s\\n\"); \n", $1) 36 printf("#endif \n") 37 printf("\n") 38 printf("#ifdef P%s\n", $1) 39 printf(" printf (\"P%s defined to be %%d\\n\", P%s+0); \n", $1, $1) 40 printf("#else \n") 41 printf(" printf (\"no symbol for P%s\\n\"); \n", $1) 42 printf("#endif \n") 43 printf("\n") 44 printf("#ifdef _SC_%s\n", $1) 45 printf(" pr_sysconf (\"sysconf (_SC_%s) = \", _SC_%s); \n", $1, $1) 46 printf("#else \n") 47 printf(" printf (\"no symbol for _SC_%s\\n\"); \n", $1) 48 printf("#endif \n") 49 printf("printf (\"\\n\"); \n") 50 printf("\n") 51 } 52 close ("sysconf.sym") 53 while (getline < "pathconf.sym" > 0) { 54 printf("#ifdef %s\n", $1) 55 printf(" printf (\"%s defined to be %%d\\n\", %s+0); \n", $1, $1) 56 printf("#else \n") 57 printf(" printf (\"no symbol for %s\\n\"); \n", $1) 58 printf("#endif \n") 59 printf("\n") 60 printf("#ifdef _%s\n", $1) 61 printf(" printf (\"_%s defined to be %%d\\n\", _%s+0); \n", $1, $1) 62 printf("#else \n") 63 printf(" printf (\"no symbol for _%s\\n\"); \n", $1) 64 printf("#endif \n") 65 printf("\n") 66 printf("#ifdef _POSIX_%s\n", $1) 67 printf(" printf (\"_POSIX_%s defined to be %%d\\n\", _POSIX_%s+0); \n", $1, $1) 68 printf("#else \n") 69 printf(" printf (\"no symbol for _POSIX_%s\\n\"); \n", $1) 70 printf("#endif \n") 71 printf("\n") 72 printf("#ifdef _PC_%s\n", $1) 73 printf(" pr_pathconf (\"pathconf (_PC_%s) = \", argv[1], _PC_%s); \n", $1, $1) 74 printf("#else \n") 75 printf(" printf (\"no symbol for _PC_%s\\n\"); \n", $1) 76 printf("#endif \n") 77 printf("printf (\"\\n\"); \n") 78 printf("\n") 79 } 80 close ("pathconf.sym"); 81 exit 82 } 83 END { 84 printf(" exit (0); \n") 85 printf("}\n") 86 printf("\n") 87 printf("static void \n") 88 printf("pr_sysconf (char *msg, int name) \n") 89 printf("{\n") 90 printf(" long val; \n") 91 printf(" fputs (msg, stdout); \n") 92 printf(" errno = 0; \n") 93 printf(" if ((val = sysconf (name)) < 0) { \n") 94 printf(" if (errno != 0) { \n") 95 printf(" if (errno == EINVAL)\n") 96 printf(" fputs (\"(not supported)\\n\", stdout); \n") 97 printf(" else \n") 98 printf(" err_sys (\"sysconf error\"); \n") 99 printf(" }\n") 100 printf(" else\n") 101 printf(" fputs (\"(no limit)\\n\", stdout); \n") 102 printf(" }\n") 103 printf(" else\n") 104 printf(" printf (\"%%ld\\n\", val); \n") 105 printf("}\n") 106 printf("\n") 107 printf("\n") 108 printf("static void \n") 109 printf("pr_pathconf (char *msg, char *path, int name) \n") 110 printf("{\n") 111 printf(" long val; \n") 112 printf(" fputs (msg, stdout); \n") 113 printf(" errno = 0; \n") 114 printf(" if ((val = pathconf (path, name)) < 0) { \n") 115 printf(" if (errno != 0) { \n") 116 printf(" if (errno == EINVAL)\n") 117 printf(" fputs (\"(not supported)\\n\", stdout); \n") 118 printf(" else \n") 119 printf(" err_sys (\"pathconf error, path = %%s\", path); \n") 120 printf(" }\n") 121 printf(" else\n") 122 printf(" fputs (\"(no limit)\\n\", stdout); \n") 123 printf(" }\n") 124 printf(" else\n") 125 printf(" printf (\"%%ld\\n\", val); \n") 126 printf("}\n") 127 }
其實原理很簡單啦,就是把每一行都用 awk printf 來生成,只是針對常量部分,使用一個迴圈,分別從檔案中讀取常量來進行動態生成。這裡需要提供兩個檔案: sysconf.sym 與 pathconf.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
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_UNIT 的常量有用 (同時存在 _XOPEN_UNIT 與 _PC_XOPEN_UNIT);第 4 個規則對於形如 THREAD_KEYS_MAX 的常量有用 (同時存在 _POSIX_THREAD_KEYS_MAX / PTHREAD_KEYS_MAX / _PC_THREAD_KEYS_MAX);最後一個規則對於 pathconf.sym 而言是 _PC_XXX。
有了這個程式碼模板和常量定義檔案之後,就可以通過 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 去獲取,會更準確一些。