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

Linux下C程序的可擴展性.

系統 2146 0

What I write, what I lose.

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

?

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

?

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

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.腳本控制/修改代碼中的宏定義.

      源代碼中的一些宏定義是由腳本統一生成的. 修改此宏定義只需要修改對應的控制腳本或者控制腳本解析的文件. 然后由腳本生成源代碼中的宏定義頭文件.
      
具體的簡單示例如下:
控制腳本config.sh 負責生成宏定義選項到 common_def.h頭文件中.
common_def.h中定義程序需要使用到的宏定義選項.
具體實現的.c源代碼include 頭文件common_def.h.
修改宏定義則需修改config.sh或者控制腳本解析的文件 .執行腳本生成新的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模塊中的代碼.
此方法跟統一宏定義的方法類似. 區別在于增加獨立的配置信息模塊.

6.動態配置文件.

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

7.使用環境變量

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

8.使用可執行程序的參數

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


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

以上, 謝謝......




Linux下C程序的可擴展性.


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 999精品久久久中文字幕蜜桃 | 亚洲视频日韩 | 99热久久这里只有精品在 | 999人在线精品播放视频 | 成人欧美一区二区三区黑人免费 | 97理论片| 免费观看国产网址你懂的 | 精品免费在线视频 | 亚洲欧美另类国产综合 | 欧美一区中文字幕 | 久久动漫精品 | 国产成人精品免费视频大全五级 | 欧美高清视频www夜色资源网 | 可以看美女隐私的网站 | 久久久久久免费观看 | 色综合欧美 | 黄色的网站在线观看 | 中文国产成人精品久久无广告 | 四虎影视在线播放 | 亚洲精品国产第一区第二区国 | 免费亚洲一区 | 久久精品国产久精国产果冻传媒 | www.久操| 男女一级免费视频 | youjizz欧美粗又大中国 | 欧美日韩不卡码一区二区三区 | 成人精品综合免费视频 | 日韩精品一区二区三区 在线观看 | 手机看片自拍日韩日韩高清 | 伊人精品影院一本到欧美 | 久久综合给合久久狠狠狠色97 | 国产日韩一区二区三区在线观看 | 毛片免费全部播放一级 | 国产美女mm131爽爽爽免费 | 中文字幕久久亚洲一区 | 久久精品视频网 | 国产在线一区二区三区在线 | 亚洲成a| 国产精品中文 | 国产亚洲一区二区三区在线 | 97狠狠操 |