天天看點

Linux C程式設計與Shell程式設計在開發實用工具方面的相同點總結

以whois包中的mkpasswd的源碼mkpasswd.c檔案為例,   

兩者都需要做的事情:    

    (1)在程式運作前需要滿足其運作環境,包括聲明需要使用哪些庫哪些檔案,例如c中的條件編譯,shell程式設計中的部分條件判斷,如檔案是否存在、是否可執行    

    (2)具備靈活性和可移植性:充分運用宏定義或全局變量(shell專用),盡管c中許多宏定義不僅僅用于程式運作還用于程式移植,shell中的許多全局變量也可用于腳本的移植    

    (3)都需要做參數(argument)聲明:允許使用者給程式傳入那些參數,不允許使用者傳入那些參數;哪些參數是不可同時使用,哪些參數必須同時使用    

    (4)定義程式是否接受長選項(--sargv)    

    (5)對使用者的輸入做過濾判斷處理,各種輸入情況的判斷處理、非法輸入和特殊字元的處理    

    (6)控制使用者使用邏輯和避免流程缺陷:保證使用者輸入不會超出程式設計預期,如輸入(字元串長度、數字長度)溢出,保證流程流向并正确處理和結束    

    (7)與作業系統結合緊密:符合作業系統規範和作業系統哲學,如恰當的函數傳回值、程式退出傳回值、接受管道、區分stdin、stdout、stderr等    

    (8)函數調用或外部程式調用,需要捕獲異常并處理異常,來自使用者或系統的中斷處理、信号處理    

    (9)執行核心方法前做好一切事情    

    (10)main函數盡可能的清晰精短、注意功能的拆分,保持函數原子性,盡可能的将函數複用,使用必要的縮進    

    (11)站在巨人的肩膀上,避免重複造輪子,使用并保持一緻的程式設計風格    

    (12)程式運作完,擦好自己的屁股,程式運作前後充分與使用者互動    

    (13)适當賣弄一下自己的程式設計技巧和程式設計藝術    

    (14)有時需要注意語言國際化問題    

    (15)聲明協定、許可和較為詳細注釋、todo,允許他人使用,改寫,再創作等    

    (16)接受bug,留下自己的聯系方式,哈哈!

tag:linux c程式設計,linux哲學,unix哲學,linux shell程式設計,linux程式設計思想

--end--

繼續閱讀