亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Linux下C程序的可擴展性.

系統(tǒng) 1848 0

What I write, what I lose.

以下為個人關于Linux下C程序的可擴張性的一點想法.

?

    
      可擴展性的應用場景:
    
  
    
      1. 有兩個項目都需要使用的一個相同功能的程序, 但是有些要求不一樣.
    
  
    
      ? ? 比如:升級程序, 一個是2個分區(qū),一個是3個分區(qū).
    
  
    
      2. 具體使用的參數(shù)可能產(chǎn)生變化.
    
  
    
      ? ? 比如:服務器地址, 可能在開發(fā)階段和正式上線階段不同.
    
  

?

如何讓程序具有可擴展性. 我理解到的增加可擴展的方式.

1.代碼級別的修改.

      比如針對服務器地址:
      
……
const char* server_url = “http://testserver:8080/service/xxInterface”;
https_post(server_url, ……);
……
當程序更新服務器地址為正式服務器后, 則在代碼中找到對應的地方, 修改為
……
const char*server_url=“http://domainserver:8080/service/xxIterface”;
https_post(server_url, ……);
……

修改時需要找到所有使用此地址的變量. 全部加以修改.

2.代碼級別的宏定義修改.

      ……
      
#define SERVER_URL “http://testserver:8080/service/xxInterface”;
……
https_post(SERVER_URL, ……);
……
當程序更新服務器地址為正式服務器后, 則只需要修改此一處宏定義即可.

這種方法修改比較簡單. 但是缺點是需要手動更新源代碼.

3.腳本控制/修改代碼中的宏定義.

      源代碼中的一些宏定義是由腳本統(tǒng)一生成的. 修改此宏定義只需要修改對應的控制腳本或者控制腳本解析的文件. 然后由腳本生成源代碼中的宏定義頭文件.
      
具體的簡單示例如下:
控制腳本config.sh 負責生成宏定義選項到 common_def.h頭文件中.
common_def.h中定義程序需要使用到的宏定義選項.
具體實現(xiàn)的.c源代碼include 頭文件common_def.h.
修改宏定義則需修改config.sh或者控制腳本解析的文件 .執(zhí)行腳本生成新的common_def.h頭文件. 然后重新編譯.
  


4.編譯選項修改.

      編譯預處理時的宏定義由編譯選項確定.
      
具體的簡單示例如下:
代碼中有:
#if DOMAIN_SERVER
const char* server_url = http://domainserver:8080/service/xxIterface;
#else
const char* server_url =“http://testserver:8080/service/xxIterface”;
#endif
DOMAIN_SERVER的定義不在源代碼中設定, 而是在編譯的時候有編譯器選項確定.
gcc –o a.out -DDOMAIN_SERVER=1 src.c //打開#if DOMAIN_SERVER
gcc –o a.out -DDOMAIN_SERVER=0 src.c //關閉#if DOMAIN_SERVER

使用不同的編譯選項重新編譯即可讓程序擴展使用不同的server_url.


5.硬編碼配置文件.

      在代碼中增加一個配置信息模塊. 程序需要的可配置信息從此模塊中讀取. 需要程序針對配置擴展修改時, 只需要修改此模塊重新編譯即可.
      
具體的簡單示例如下:
update_config模塊. update_config.c
……
add_config_item(“server_url”, “http://domainserver:8080/service/xxIterface”);
……
修改時只需要修改對應的update_config模塊中的代碼.
此方法跟統(tǒng)一宏定義的方法類似. 區(qū)別在于增加獨立的配置信息模塊.

6.動態(tài)配置文件.

      程序在需要可配置信息時, 需要讀取獨立的配置文件, 解析此配置文件得到具體的配置信息.
      
具體的簡單示例如下:
配置文件 update.conf:
server_url=http://domainserver:8080/service/xxIterface
配置信息模塊解析文件update.conf. 得到server_url的值. 封裝提供給其它模塊使用.
配置文件的格式可自行設定. 如設置成鍵值對的文本文件, 或者xml格式都可以.
此方法的優(yōu)點是不需要重新編譯代碼, 只需修改config配置文件即可使獲得可擴展性.

7.使用環(huán)境變量

      程序在需要使用可配置信息時, 使用getenv讀取環(huán)境變量. 注意需要在程序運行之前設置該環(huán)境變量.
      
具體的簡單示例如下:
run.sh是程序運行腳本. a.out是可執(zhí)行程序, a.out需要使用server_url.
run.sh中內(nèi)容
export SERVER_URL=http://domainserver:8080/service/xxIterface
./a.out
a.out實現(xiàn).
const char* server_url = getenv(“SERVER_URL”);
……
此方法的優(yōu)點是不需要重新編譯代碼, 只需要在程序運行前修改對應的環(huán)境變量定義.

8.使用可執(zhí)行程序的參數(shù)

      可執(zhí)行程序在實際執(zhí)行時, 可對參數(shù)進行解析, 根據(jù)不同的參數(shù)內(nèi)容得到不同的可配置信息.
      
具體的簡單示例如下:
a.out實現(xiàn)的時候先解析參數(shù).
a.out –ddomainserver 解析為使用domainserver
a.out –dtestserver 解析為使用testserver


實際使用過程中, 可根據(jù)不同的應用場景, 使程序執(zhí)行具有可擴展性.

以上, 謝謝......




Linux下C程序的可擴展性.


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日本不卡高清免费 | 亚洲 欧美 视频 | 亚洲精品综合一区二区三区在线 | 欧美中文字幕在线观看 | 性色视频在线 | 欧美一级一极性活片免费观看 | 老司机日日摸夜夜摸精品影院 | 黄色片网站视频 | 欧美jizzhd精品欧美4k | 极品毛片 | 欧美不卡在线观看 | 性欧美另类老妇高清 | 5252色欧美在线男人的天堂 | 日韩成 | 亚洲综合色网站 | 欧美成人免费一级人片 | 伊人久久成人爱综合网 | 久久精品国产99久久6动漫欧 | 99久久国产综合色 | 日本午夜www高清视频 | 久久精品美女 | 国产成人香蕉在线视频fuz | 国产成人精品s8p视频 | 亚洲 欧美 精品 中文第三 | 国产在线观看精品香蕉v区 国产在线观看美女福利精 国产在线观看午夜不卡 | 狠狠地操 | 国产亚洲精品福利在线 | 全免费午夜一级毛片真人 | 亚洲午夜国产精品无卡 | 国产99re| 免费99精品国产自在现线观看 | 国产福利免费看 | 亚洲综合一 | 国产午夜久久精品 | 99视频全部看免费观 | 久久se精品动漫一区二区三区 | 国产成人午夜性a一级毛片 国产成人午夜性视频影院 国产成人系列 | 欧美视频在线不卡 | 真实偷拍激情啪啪对白 | 国产最新网站 | 久久99精品久久久久久噜噜 |