啟動過程安裝main函式呼叫函式來分析
1 sanitycheck 這個是完整性分析,主要是檢視libevent版本是不是1.1或者1.2,如果低於1.1 1.2 請公升級到1.1 或者最高(呼叫event_get_version返回乙個字串)(在自己的電腦上面得到的版本是2.0.21-stable 編譯的時候要加上-levent這個庫名字)
2signal 定義sigint 處理辦法就是退出,這個是對中斷訊號的處理方法
3 setbuf呼叫此函式來關閉出錯緩衝setbuf(stderr,null);
4 (乙個大迴圈基本可以就結束了)while迴圈呼叫getopt 返回值不為-1
getopt 第一第二引數主函式的引數
後面解釋一下使用者輸入引數的選項的意思
-a 後面接的8八進位制表示unix socket許可權
-p tcp鏈結伺服器的埠
-s unix socket 目錄
-u udp埠
-m 最大記憶體
-m 記憶體耗盡返回錯誤 後面無需引數
-c 最大鏈結
-k鎖定所有分頁記憶體 後面無需引數
-hi 幫助資訊,以及註冊資訊(後面無需引數)
-v表示詳細資訊 無需引數
-d表示deamon模式執行
-l 表示監聽藉口
-p 儲存memcached程序pid檔案
-n 最小分配給key+value+flags記憶體空間大小
-t 執行緒數目
-l 大記憶體頁(不懂
-r 每個事件最大連線數
-c不適用cas 後面不帶引數
-b繫結協議
-s開啟sasl (這個需要首先安裝libsasl,然後安裝gsasl)
-o 擴充套件選項
(如果在迴圈內呼叫while (-1 != (c = getopt(argc, argv, "a:" "p:" "s:")) )
此時主函式的引數是-a 100 -p 999 -s fasdfas
呼叫的時候輸出是
100999
fasdfas )
實際上在memcached中將所有的-* 後面的引數賦給全域性結構體settings中的某個成員
case a 是呼叫strtol將optarg轉換為8進製的書返回給settings成員access
case u 是呼叫atoi將optarg轉為整數賦給settings成員u***ort
case p 呼叫atoi將optarg轉為整數賦給settings成員port(也就是預設的tcp協議埠)
case s 將optarg直接賦給settings成員socketpath
case m 呼叫atoi將optarg轉為整數賦給settings成員maxbytes然後乘以1024*1024 實際上就是限制了最大的記憶體空間(以兆為單位)
case m 記憶體耗盡將settings成員evict_to_free賦為0
case c 呼叫atoi將optarg轉為整數賦給賦給settings成員 maxconns
case h 呼叫usage(),輸出用法資訊,然後呼叫exit退出
case i 呼叫useage_license,然後退出
case k 將main內變數lock_memory設為1
case v 將賦給settings成員verbose 自加1
case l 如果賦給settings成員inter不為空,則將-l後面的引數和inter一起放入inter,如果為空則將-l後面引數賦給inter
case d 使用deamon模式yunxing
case r 將main變數maxconre設為1
case r 將optarg轉為整數賦給賦給settings成員reqs_per_event
case u 將optarg賦給username
case p 將optarg賦給pid_file
case f 將optarg轉換為浮點數也就是每次相乘的不是2,而是轉為浮點數的賦給settings成員factor變數(且不能小於1)
case t 將呼叫atoi將optarg轉為整數賦給賦給settings成員賦給settings成員num_threads也就是多少個執行緒執行如果執行緒數大於64或者小於0都不行
case d 如果optarg為空或者第乙個字元為空,main函式返回,程式終止,如果不成立則將optarg第乙個字元賦給賦給settings成員prefix_delimiter,然後settings.detail_enabled = 1;
case l 如果支援大葉分配則將preallocate賦為true,如果不支援則返回錯誤資訊
case c settings成員use_cas賦為0
case b 呼叫atoi將optarg轉為整數賦給settings成員backlog
case b 如果optarg為auto則將settings成員binding_protocol 賦為negotiating_prot,如果為binary則將settings.binding_protocol = ascii_prot;settings.binding_protocol = binary_prot;如果為ascii則將settings.binding_protocol = ascii_prot;,其他選項都是錯誤的
case i,optarg最後乙個字元如果為k或者k,m,m,則將optarg轉為記憶體大(如果最後為k,k則是多少kb位元組,如果為m,m則是多少兆位元組),然後賦給settings.item_size_max,
case s如果 本系統支援sasl則將將settings成員sasl賦為true,如果不支援列印輸出
case o 呼叫getsubopt來得到optarg引數下的子引數,比如hashpower_init slab_reassign,slab_autmove等等
迴圈結束
如果全域性結構體settings成員inter不為空,且inter裡面有乙個,號,則settings.num_threads_per_udp = 1;否則settings.num_threads_per_udp = settings.num_threads;
如果settings成員sasl不為false,如果指定了協議,則將settings繫結的協議
太詳細了,換成自己的語言
u boot啟動過程 1
u boot的啟動過程 1.start.s檔案 此彙編檔案是u boot啟動的第乙個檔案,首先確定是冷啟動還是熱啟動,boot cold or boot warm 通過對r21寫0x01 cold or ox02 warm 完成。接著在boot warm中 1 判斷是否定義config cogent...
Android啟動過程分析 1
從系統的角度看,android的啟動過程可以分為bootloader引導 裝載和啟動linux核心,啟動andorid系統的3個大的階段。其中android系統的啟動還可以細分為啟動init程序,啟動zygote,啟動sytemserver,啟動各項服務等多個階段。1 bootloader的引導 b...
tomcat啟動過程分析(1)
以tomcat為例,看tomcat是怎樣啟動的。tomcat中有乙個startup.bat 批處理檔案,這個檔案會啟動另乙個批處理檔案 catalina.bat 而這個批處理會設定set classpath classpath catalina home bin bootstrap.jar 也就是把...