福斯將在美國闢新廠,生產電動車

新版北美自貿協定(NAFTA)再發威!福斯(Volkswagen)揮軍電動車,為了卡位美國市場,打算在美國設立新廠,目前正在尋找合適地點。

路透社報導,福斯 11 月稍早宣布,2023 年前將斥資近 440 億歐元(約 500 億美元)發展電動車、自動駕駛、新移動服務,並探詢和美國車廠福特汽車合作的可能性。福斯計劃 2020 年發售電動車,為了達成此一目標,該公司將先在海外生產,之後改到美國新廠製造。

新上任的福斯美國區執行長 Scott Keogh 28 日表示,福斯 2020 年將推出售價 3 萬至 4 萬美元的電動車,為此需要新的工廠。福斯在美國田納西州已有工廠,生產 Passat 和 Atlas 等車款,田納西廠仍有足夠空間,是新廠可能的落腳地點之一,但是不必然在此設廠。

(本文內容由 授權使用。首圖來源:)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※教你寫出一流的銷售文案?

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

※超省錢租車方案

※產品缺大量曝光嗎?你需要的是一流包裝設計!

哈雷機車大轉型,推出電動機車

說起哈雷機車(HARLEY-DAVIDSON),大部分人心中就響起重機隆隆的引擎聲,這註冊商標般的引擎聲,讓哈雷機車得到猛豬(hog)美譽,形象深植人心到,哈雷連股票交易代碼都用「HOG」代表自己。轟轟隆的哈雷機車引擎聲,是男人的浪漫,然而,不可想像的事情發生了,哈雷機車竟然推出電動機車,電動化也就代表沒有引擎而是以馬達取代,當然就不會有轟隆隆的引擎聲,這樣真的可以嗎?

2018 年 11 月 6~12 日舉辦的米蘭國際機車暨零件展(EICMA),哈雷發表 LiveWire 電動機車,跨出這個讓世人震驚的重大一步。哈雷機車必須全力轉型,吸引全新世代的新消費者,推出電動機車、油電混合機車,是其中不可或缺的一步,即使這代表向過去告別,也在所不惜。

哈雷機車為何做出如此甘冒大不韙的決策,根本原因是:人口學。傳統重機車的消費者年年變老,但是新近世代的年輕消費者卻未加入,這使重機車市場消費者呈現老化結構,美國幾乎半數重機車消費者都已經年過 50,他們或許還老當益壯,但是隨著年紀再更大,會因退休而無法一直購買新車,也會因體力衰老終於不方便騎車,最老的一代更會來到人類壽命的終點。

哈雷機車未雨綢繆,雖然 2018 年第三季季報仍然超越市場預期,但市佔率已開始萎縮,隨著忠實消費族群一年年老化,新消費者再不加入,哈雷遲早要被時代淘汰。因此 2017 年,哈雷訂下了 10 年計畫,預定到 2027 年要吸引 200 萬新車主,包括大力進軍電動機車,甚至輕型機車、電動腳踏車。另一方面,許多新世代只想輕鬆騎車,覺得重機危險麻煩又辛苦,為了打破這種刻板印象,哈雷打算設立許多學校,教導新世代怎麼騎機車。

電動機車其實相對於內燃機機車有許多技術優勢,例如不需換檔,且從靜止開始的加速扭力相對極大,加速過程沒有換檔的中斷時間,更無比順暢。以電動車為例,特斯拉(Tesla)Model S P100D 從靜止加速到時速 60 英哩只要 2.5 秒。這種超快加速力,很適合喜愛機車遠比汽車加速度更快的機車玩家。但很顯然的,電動機車不會有引擎聲,取而代之的是電動傳動系統的馬達聲。

哈雷機車計畫在未來幾年推出數款新機車產品線,LiveWire 是其中之一,預定於 2019 年底,於美國與歐洲精選通路上市,2019 年初就會公布售價。不過,哈雷機車轉型到電動機車之路,還有許多困難,內燃機與電動傳動系統是完全不同的專業領域,哈雷能否專精是一大問題,即使挑戰成功,還有競爭對手的障礙,成立於 2006 年的加州電動機車廠 Zero Motorcycles 已推出 4 款電動機車,還預定 2019 年 10 月發表電動機車新產品線。

無論如何,在老車主逐漸老化凋零的不可逆潮流下,哈雷機車這個響噹噹的品牌,能否繼續存續,還是得看電動化能不能成功了。

(合作媒體:。首圖來源:)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※超省錢租車方案

※別再煩惱如何寫文案,掌握八大原則!

※回頭車貨運收費標準

※教你寫出一流的銷售文案?

※FB行銷專家,教你從零開始的技巧

[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\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 化:

conf.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,分別對應不依賴文件系統的常量與依賴文件系統的常量,因為最後它們的調用方法不同,之前已經說明過了。

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 去獲取,會更準確一些。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

C#構造函數 -0028

默認構造函數

聲明基本構造函數的語法就是聲明一個與類同名的方法,但該方法沒有返回類型:

public class MyClass
{
	public MyClass()
	{
	}
	// rest of class definition
}

如果沒有提供任何構造函數,編譯器會在後台生成一個默認的構造函數。默認的構造函數,只能把所有的成員字段初始化為標準的默認值。

但是,如果定義了帶參數的構造函數,編譯器就不會自動提取默認的構造函數。

private或protected構造函數

可以把構造函數定義為private或Protected,這樣就限制不相關的類不能訪問它。

比如定義private,

public class MyNumber
{
	private int _number;
	private MyNumber(int number) // another overload
	{
		_number = number;
	}
}

在外部代碼中,不能使用new關鍵字實例化MyNumber;但可以編寫一個公有靜態屬性或方法,以實例化該類,比如單例模式。

public class Singleton
{
	private static Singleton _instance;
	private int _state;
	private Singleton(int state) => _state = state;
	public static Singleton Instance => _instance ?? (_instance = new Singleton(42));
}

構造函數中調用其他構造函數

class Car
{
	private string _description;
	private uint _nWheels;
	public Car(string description, uint nWheels)
	{
		_description = description;
		_nWheels = nWheels;
	}
	public Car(string description): this(description, 4)
	{
	}
	// ...
}

通過this關鍵字調用另一個構造函數,這種語法稱為構造函數初始化器。this關鍵字調用參數最匹配的那個構造函數。

注意,構造函數初始化器在構造函數的函數體之前執行。如:

var myCar = new Car("Proton Persona");

會先調用有兩個參數的構造函數,然後調用只有一個參數的構造函數。

靜態構造函數

C#可以給類定義無參數的靜態構造函數,這種構造函數只執行一次。

靜態構造函數只能訪問類的靜態成員,不能訪問類的實例成員。

靜態構造函數不能帶任何參數,一個類也只能有一個靜態構造函數。

在C#中,通常在第一次調用類的任何成員之前,執行靜態構造函數。

public enum Color
{
	White,
	Red,
	Green,
	Blue,
	Black
}

  

public static class UserPreferences
{
	public static Color BackColor { get; }
	static UserPreferences()
	{
		DateTime now = DateTime.Now;
		if (now.DayOfWeek == DayOfWeek.Saturday || now.DayOfWeek == DayOfWeek.Sunday)
		{
			BackColor = Color.Green;
		}
		else
		{
			BackColor = Color.Red;
		}
	}
}

  

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※教你寫出一流的銷售文案?

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

※超省錢租車方案

※產品缺大量曝光嗎?你需要的是一流包裝設計!

深入理解JVM(③)低延遲的Shenandoah收集器

前言

Shenandoah作為第一款不由Oracle(包括一起的Sun)公司的虛擬機團隊所領導開發的HotSpot垃圾收集器。是只存在於OpenJDK當中的,最初由RedHat公司創建的,在2014年的時候貢獻給了OpenJDK。

與G1相比的優點

從代碼的歷史淵源上來看,Shenandoah收集器更像是G1的下一代繼承者,兩者相似的堆內存布局,在初始標記、併發標記等許多階段的處理思路都高度一致。
但是Shenandoah相比G1還是至少有三個明顯的不同之處。
1、支持併發的整理算法,G1的回收階段是可以多線程并行的,但卻不鞥呢與用戶線程併發。
2、Shenandoah是默認不使用分代收集的,不會有專門的新生代Region或者老年代Region的存在。
3、Shenandoah摒棄了在G1中耗費大量內存和計算資源去維護的記憶集,改用名為“連接矩陣”(Connection Matrix)的全局數據結果來記錄誇Region的引用關係降低了誇代維護的消耗。
Shenandoah收集器的跨代“連接矩陣”示意圖

連接矩陣可以簡單的理解為一張二維表格,如果Region N有對象指向Region M,就在表格的N行M列中打上一個標記,如上圖所示,如果Region 5中的對象Object C引用了Region 3 的Object B,Object B又引用了Region 1 的Object A,那麼連接矩陣就中就會在5行3列、3行1列中打上標記。在回收時通過這張表格就可以得出哪些Region 之間產生了跨代引用。

收集過程

Shenandoah收集器的工作過程大致可以劃分為以下九個階段:

  • 初始標記:與G1一樣,首先標記與GC Roots直接關聯的對象,這個階段仍是“Stop The World”的,但停頓時間與堆大小無關,至於GC Roots的數量相關。
  • 併發標記:與G1一樣,編輯對象圖,標記出全部可達的對象,與用戶線程一起併發,時間長短與堆中存活對象的數量以及對象圖的結構複雜程度有關。
  • 最終標記:與G1一樣,處理剩餘的SATB掃描,並在這個階段統計出回收價值最高的Region,將這些Region構成一組回收集。此階段也會有一小段短暫的停頓。
  • 併發清理:這個階段用於清理那些整個區域內連一個存活對象都沒有找到的Region。
  • 併發回收:這個階段是Shenandoah與之前HotSpot中其他收集器的核心差異。在這個階段,Shenandoah要把回收集裏面的存活對象先複製一份到其他未被使用的Region中。但是有個難點是在移動對象的同時,用戶線程仍然可能不停的對被移動的對象進行讀寫訪問,移動對象之後整個內存中所有指向該對象的引用都還是舊對象的地址,這是很難一瞬間全部改變過來的。對於這個難點,Shenandoah將會通過讀屏障和被稱為“Brooks Pointers”的轉髮指針來解決。
    併發回收階段運行時間的長短取決於回收集的大小。
  • 初始引用更新:併發回收階段複製對象結束后,還需要把堆中所有指向舊對象的引用修正蛋糕複製后的新地址,這個操作稱為引用更新。這個階段就是對這個操作進行初始化的,初始引用更新時間很短,會產生一個非常短暫的停頓。
  • 併發引用更新:真正開始進行引用更新操作,這個階段是與用戶線程一起併發的,時間長短取決於內存中涉及的引用數量的多少。
  • 最終引用更新:解決了堆中的引用更新后,還要修正存在於GC Roots 中的引用。這個階段是Shenandoah的最後一次停頓,時間長短與GC Roots的數量有關。
  • 併發清理:經過併發回收和引用更新之後,整個回收集中所有的Region已再無存活對象,最後再調用一次併發清理過程來回收這些Region 的內存空間,供以後新對象分配使用。

這九個階段的工作過程可能拆的比較瑣碎,只要抓住其中三個最重要的併發節點(併發標記、併發回收、併發引用更新)就好理解Shenandoah的運作過程了。

轉髮指針(Brooks Pointer)

Shenandoah收集器的併發回收的核心是,轉髮指針。
轉髮指針的核心內容就是,在原有對象布局結構的最前面統一增加一個新的引用字段,在正常不處於併發移動的情況下,該引用指向對象自己。
如下圖:

轉髮指針加入后帶來的收益自然是當對象擁有了一份新的副本時,只需要修改一處指針的值,即舊對象上轉髮指針的引用位置,使其指向新對象,便可將所有對該對象的訪問轉發到新的副本上。這樣只要對象的內存仍然存在,未被清理掉,虛擬機內存中所有通過舊引用地址訪問的代碼仍然可用,都會被自動轉發到新對象上繼續工作。
如下圖:

Brooks Pointers 轉髮指針在設計上決定了它是必然會出現多線程競爭問題的。Shenandoah收集器是通過比較交換(Compare And Swap,CAS)操作來保證併發時堆中的訪問正確性的。

總結

1、Shenandoah收集器保證了收集垃圾的低延遲。
2、但是使用了過多的寫屏障,所以導致Shenandoah收集器的弱項很明顯,當數據量大的時候會產生高運行負擔而使得吞吐量下降。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※超省錢租車方案

※別再煩惱如何寫文案,掌握八大原則!

※回頭車貨運收費標準

※教你寫出一流的銷售文案?

※FB行銷專家,教你從零開始的技巧

中國新能源車政策鬆綁,外資獲准持有多數股權

  川普本周亞洲行來到中國,中方頻頻讓利討川普歡心。11月9日在習近平與川普的一場會談上,中國宣布訪寬外資對新能源車的持股限制,美國電動車龍頭特斯拉有望受惠。   中國目前限制外資持有合資公司的股份不得超過50%。但從明年六月起,設點在指定自貿區的電動車或其它類型的新能源車合資公司,外資持股比例將可超過五成門檻。   有意深耕中國市場的特斯拉,可能成為政策鬆綁下的潛在受惠者。華爾街日報日前報導指出,特斯拉擬赴上海設廠,且已與中國政府達成協議,雙方只差細節與宣布時間還未敲定,可能正在等待新政策發布。   另外,福特、安徽眾泰汽車(Anhui Zotye Automobile Co.)11月8日在川普的見證下,宣布兩公司將合資7.56億美元,在中國打造動車廠,雙方持股比為50:50。   (本文內容由授權使用。首圖來源:public domain CC0)  

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

※聚甘新

「孤獨海豚」!水族館關閉後 牠們獨活8個月

摘錄自2018年08月31日蘋果日報日本報導

日本千葉縣一間水族館年初時因經營不善倒閉,但媒體發現,水族館內還有大量海洋生物遭遺棄,過去8個月來雖靠著員工定時餵食存活,但狀況堪憂。尤其是館內一頭名叫「甜心」(Honey)的海豚,牠因孤獨被留在水池內而出現壓力過大現象。日本動物保育團體和網友發現後相當痛心,呼籲相關單位盡快伸出援手。

當地媒體報導,「甜心」是在2005年於太地町「血腥海灣」被捕捉後送往千葉縣銚子市的犬吠埼水族館,成為遊客的觀賞對象。該水族館近年來遊客銳減,而在今年1月宣布倒閉,但水族館內的大量動物未獲得妥善安置。除了海豚「甜心」,另外還有46隻企鵝及數百隻魚類就這樣被留在水族館內,雖然仍有工作人員定時餵食,但媒體從館外拍攝會面可見,「甜心」孤獨地在水池內探頭往外看,企鵝則在殘破的設施中走動,宛如世界末日後只剩下動物獨留的狀態。

日本網友看見「甜心」和其他動物遭遺棄的畫面後,紛紛氣憤在網路上留言痛批館方,要求政府單位介入處理。目前已有一間度假飯店表示,願意收留這些可憐的海洋動物。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

※聚甘新

籲政界救生態 法演員茱麗葉畢諾許一呼百應

摘錄自2018年9月4日中央社報導

法國資深環保人士余洛突然辭去生態部長一職,在政界依然餘波盪漾。法國演員茱麗葉畢諾許和物理學者巴魯眼見生態系統岌岌可危,投書媒體呼籲政界採取行動,藝文界一呼百應。

投書內文指出:「我們正經歷一場全球災難,氣候暖化、生物品種數量劇減、生物多樣性崩壞、土地及水和空氣嚴重污染、森林被迅速砍伐,所有指標都在示警,照這樣下去,數十年後,就幾乎什麼都不剩了,人類和多數品種的處境都很艱困。」

內文表示,生態系統正在崩壞,第6次大規模生物滅絕以前所未有的速度進行,但「還來得及避免最糟的結果」。

內文還表示,世上還有很多其它有理有據的目標要爭取,但若輸了生態這場戰鬥,其它也不用打了。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※教你寫出一流的銷售文案?

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

※超省錢租車方案

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※聚甘新

德國建築節能怎麼練成的?法規&技術雙軌並進

環境資訊中心記者 陳文姿報導

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※超省錢租車方案

※別再煩惱如何寫文案,掌握八大原則!

※回頭車貨運收費標準

※教你寫出一流的銷售文案?

※FB行銷專家,教你從零開始的技巧

※聚甘新

中國大陸推排放標準,控管油電混和車排放

大陸環保部30日發布涉及船舶發動機、摩托車、輕便摩托車、輕型混合動力電動汽車和燒鹼、聚氯乙烯(PVC)工業排放的五項國家污染物排放標準,分別為《船舶發動機排氣污染物排放限值及測量方法(中國第1、2階段)》、《摩托車污染物排放限值及測量方法(中國第4階段)》、《輕便摩托車污染物排放限值及測量方法(中國第4階段)》、《輕型混合動力電動汽車污染物排放控制要求及測量方法》和《燒鹼、聚氯乙烯工業污染物排放標準》。上述標準旨在落實《大氣污染防治行動計畫》和《水污染防治行動計畫》,透過制定、修訂重點行業的排放標準力促產業轉型升級。

大陸環保部科技標準司司長鄒首民表示,實施這五項標準將可望大幅削減顆粒物(PM)、氮氧化物(NOx)、二氧化硫(SO2)的污染,有效促進行業技術進步和環境品質的改善。他指出,新標準適用於具有中國船籍在大陸水域航行或作業的船舶裝用的額定淨功率大於37千瓦、新生產船用發動機的環境管理,不適用於遠洋船舶,遠洋運輸船舶執行國際公約的相關規定。

鄒首民指出,上述新標準實施後,按照每年新增船機1,000萬千瓦,壽命期為25年計算,實施第一階段標準3年,所製造投入使用的船機在全壽命期內將減排NOX約140萬噸,PM約40萬噸;若實施第二階段標準3年,也將進一步減排NOX約115萬噸,PM約6萬噸。

另外,對於產量增長迅速的摩托車污染問題也正在引起重視。鄒首民說,為能有效控制摩托車污染,環保部制定了摩托車和輕便摩托車國四標準,自2019年7月1日起,所有新銷售和註冊登記的摩托車和輕便摩托車,應滿足新的標準;以國四標準實施3年估算,這期間,新生產的全部摩托車在其整個使用壽命內,將比實施國三標準減少CO排放約650萬噸、HC排放約200萬噸、NOx排放約30萬噸。

他也指出,近年來大陸國家積極鼓勵發展包括混合動力電動汽車在內的節能與新能源汽車,但由於有電能的輔助,傳統汽車的測量方法無法準確評判混合動力電動汽車的污染物排放狀況;新標準是對《輕型混合動力電動汽車污染物排放測量方法》的修訂,規定了輕型混合動力電動汽車的污染控制要求和測量方法,新標準適用於國四、國五階段的輕型混合動力汽車的環保管理,該測量方法標準的實施,將不會帶來額外的車輛技術升級成本。

(本文內容由授權提供)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※教你寫出一流的銷售文案?

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

※超省錢租車方案

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※聚甘新