日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Linux下C程序的可擴(kuò)展性.

系統(tǒng) 2001 0

What I write, what I lose.

以下為個(gè)人關(guān)于Linux下C程序的可擴(kuò)張性的一點(diǎn)想法.

?

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

?

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

1.代碼級(jí)別的修改.

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

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

2.代碼級(jí)別的宏定義修改.

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

這種方法修改比較簡(jiǎn)單. 但是缺點(diǎn)是需要手動(dòng)更新源代碼.

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

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


4.編譯選項(xiàng)修改.

      編譯預(yù)處理時(shí)的宏定義由編譯選項(xiàng)確定.
      
具體的簡(jiǎn)單示例如下:
代碼中有:
#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的定義不在源代碼中設(shè)定, 而是在編譯的時(shí)候有編譯器選項(xiàng)確定.
gcc –o a.out -DDOMAIN_SERVER=1 src.c //打開(kāi)#if DOMAIN_SERVER
gcc –o a.out -DDOMAIN_SERVER=0 src.c //關(guān)閉#if DOMAIN_SERVER

使用不同的編譯選項(xiàng)重新編譯即可讓程序擴(kuò)展使用不同的server_url.


5.硬編碼配置文件.

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

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

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

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

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

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

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


實(shí)際使用過(guò)程中, 可根據(jù)不同的應(yīng)用場(chǎng)景, 使程序執(zhí)行具有可擴(kuò)展性.

以上, 謝謝......




Linux下C程序的可擴(kuò)展性.


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 施甸县| 蚌埠市| 长葛市| 洪泽县| 杭州市| 宜春市| 明星| 固原市| 手游| 大埔县| 威远县| 玉环县| 黄浦区| 清涧县| 于都县| 清丰县| 广元市| 广西| 蚌埠市| 彭泽县| 读书| 铜山县| 贵阳市| 开鲁县| 罗田县| 刚察县| 霍州市| 昌邑市| 荔浦县| 小金县| 楚雄市| 盐池县| 犍为县| 鹰潭市| 尚志市| 梓潼县| 辽阳县| 盈江县| 新泰市| 侯马市| 南雄市|