• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            我自閑庭信步,悠然自得,不亦樂乎.

                                                   ------ Keep life simple
            GMail/GTalk/MSN:huyi.zg@gmail.com

             

            取自ACE中的bit操作宏

            #?define?ACE_BIT_ENABLED(WORD,?BIT)?(((WORD)? & ?(BIT))? != ? 0 )
            #?define?ACE_BIT_DISABLED(WORD,?BIT)?(((WORD)?
            & ?(BIT))? == ? 0 )
            #?define?ACE_BIT_CMP_MASK(WORD,?BIT,?MASK)?(((WORD)?
            & ?(BIT))? == ?MASK)
            #?define?ACE_SET_BITS(WORD,?BITS)?(WORD?
            |= ?(BITS))
            #?define?ACE_CLR_BITS(WORD,?BITS)?(WORD?
            &= ? ~ (BITS))

            附上C中常用的位運算用法,取自《C Primer Plus》

            掩碼:即mask,通常為某一個位為1,而其他位都為0的byte,如00000100。

            1.把byte中除掩碼相同的位外,全部置0,掩碼位不變
            flags?&=?mask
            ?? 10101111 & 00000100 = 00000100

            2.打開位:打開特定的位,其他位不變。
            flags?|=?MASK
            00001000 | 00000100 = 00001100

            3.關(guān)閉位:關(guān)閉特定位,但不影響其他位
            flags?&=?~MASK
            11100101 &=? ~10000000 = 01100101

            4.轉(zhuǎn)置位:一個位如果打開,則關(guān)閉;如果關(guān)閉,則打開
            flags?^=?MASK
            11100101 ^=? 10000000 = 01100101
            11100101 ^=? 00010000 = 11110101

            5.查看一個位的值:
            if?((flag?&?MASK)?==?MASK)
            ????do_some_work();

            ?

            posted @ 2006-04-03 10:08 HuYi 閱讀(645) | 評論 (0)編輯 收藏

            TIM中網(wǎng)絡(luò)模型變更

            一直都隱隱約約的感覺TIM的網(wǎng)絡(luò)模型還是有點問題,但卻總說不出具體問題來。時不時就會想起這個事,今天在車上,終于恍然大悟。
            也許是受wildfire和jabberd2的影響太深了(特別是wildfire),TIM中網(wǎng)絡(luò)和業(yè)務(wù)處理的聯(lián)系過于緊密,從套接口讀到數(shù)據(jù)流后,馬上就進(jìn)入XML的PullParser分析階段,雖然之后有刻意的分離網(wǎng)絡(luò)操作和業(yè)務(wù)邏輯,但并不徹底。
            有時候業(yè)務(wù)處理還是能夠感覺到網(wǎng)絡(luò)的存在,我覺得這是個不良的設(shè)計。
            讓我耿耿于懷的,是Reactor的單線程特性。或許在某些情況下這是它的優(yōu)勢,但運用不當(dāng),就會成劣勢。現(xiàn)在的TIM把業(yè)務(wù)邏輯和網(wǎng)絡(luò)IO都擠進(jìn)了Reactor所控制的線程中,只要存在一點點的阻塞,吞吐率將大打折扣。
            wildfire敢把網(wǎng)絡(luò)和業(yè)務(wù)綁得那么緊,是因為它采用的per-request,per-thread的模型,網(wǎng)絡(luò)IO引起的阻塞不會影響到其他request處理。我也沒有wildfire那么大的膽子采用per-request,per-thread,上下文切換的消耗不說,畢竟線程的數(shù)量也是有限制的,我很懷疑到底能承受多少連接數(shù),如果沒有記錯,Linux沒有重編譯內(nèi)核,一個進(jìn)程內(nèi)最多是1024個線程,Windows能多些,好像是65535,數(shù)據(jù)可能不準(zhǔn)確,但也說明了線程資源是有限的。同時,WFMOReactor在Windows下每個線程內(nèi)可同時監(jiān)視的句柄數(shù)(62個),也似乎太少了,這點也讓我煩惱。
            仔細(xì)推敲后,我認(rèn)為還是把網(wǎng)絡(luò)和業(yè)務(wù)完全脫離比較好一點,用至少一個線程專門操作套接口,突破WaitForMultipleObjects的句柄數(shù)限制,再用另外一個線程來完成業(yè)務(wù)。在業(yè)務(wù)線程上使用管道過濾器模式來一步一步的處理數(shù)據(jù)。當(dāng)Reactor線程接收到數(shù)據(jù)后,放進(jìn)MessageBlock里面,用Task框架來處理。
            這種模型確實解決了原先的諸多毛病,但如果在這個時候改網(wǎng)絡(luò)模型,對整個項目是個不小的沖擊,極有可能導(dǎo)致在計劃的時間內(nèi)不能完成項目。猶豫了一下,為了保證品質(zhì),最終還是在SubVersion上創(chuàng)建了新的試驗分支。
            module.jpg

            posted @ 2006-03-27 22:54 HuYi 閱讀(491) | 評論 (0)編輯 收藏

            [2006.03.26]噩耗傳來

            2006,狗年,我24,本命年。
            2006,狗年,小姨36,也是本命年。
            早上醒來,接到母親的電話,告訴我小姨爹癌癥擴(kuò)散,就快去世了。雖然一直知道小姨爹的病,但沒想到會這么嚴(yán)重。
            小姨媽兩口,最疼愛我的人,我走到今天,他們是給我?guī)椭畲蟮娜耍业亩魅恕?br> 我媽以前是三班倒,幾個姨媽在還是孩子的時候,就開始幫我媽帶孩子,對我是疼愛有加,特別是小姨媽,結(jié)婚后一直無子,也沒有領(lǐng)養(yǎng),一直把我當(dāng)親兒看待。
            前兩天父親打電話來,叫我有空多打打電話給小姨爹的時候,我就開始懷疑,但父親卻不告訴我真實情況。
            今天早上接到母親電話,真的很傷心,我也無法用言語來表達(dá),當(dāng)時甚至沒有哭出來,已經(jīng)木了,過了十幾分鐘才淚上眼眶。
            平靜下來,給姨爹通了電話,他還不知道自己的病情,但聽得出來確實虛弱了很多。偏偏電話信號又不好,沒說幾句就斷了。
            在這里祝福姨爹,一定會有好轉(zhuǎn)的!!!

            posted @ 2006-03-26 23:14 HuYi 閱讀(345) | 評論 (2)編輯 收藏

            今天逛了趟書店,買了幾本書^^

            本來是陪朋友去買《UNIX編程藝術(shù)》,不過著實看見幾本很不錯的書,也買了幾本^^
            1。《Linux內(nèi)核完全剖析》
            看過作者的另一本書《Linux1.1源碼完全注釋》,覺得不錯,國內(nèi)有這個水平的人可能不少,但能做到這么細(xì)致的人就不多了。
            大概翻了一下,決定買下了。
            2。《Linux Application Development》(linux應(yīng)用程序開發(fā)第二版)
            這類書籍看過不少了,本不應(yīng)再買,但隨手翻了一頁,看到了epoll,這是Linux2.6之后才加入的新特性,看來書挺新的,應(yīng)該是近年才編寫的,又看了一下目錄,對Linux下的絕大多數(shù)編程任務(wù)都有描述,買一本做手冊吧。
            3。《精通UNIX Shell腳本編程》
            開發(fā)UNIX/Linux程序也很久了,但確實沒有認(rèn)真學(xué)過腳本,也不想像C/C++一樣學(xué)腳本,正好看見這本書,都是平時經(jīng)常用的腳本例子,大多數(shù)情況下用這里的例子稍微改改就能滿足需要了:)
            4。《GCC技術(shù)參考大全》
            這書可買可不買,GCC網(wǎng)站上就有很詳細(xì)的說明,當(dāng)手冊用吧。
            5。《我的編程感悟》
            快離開書店時忽然看見的,聞此書大名很久了,也一直在作者“云風(fēng)”的郵件列表里,對大俠的佩服猶如滔滔江水連綿不絕呀,也許在這本書中,能找到云大俠的過去,也作為對云大俠的支持,買了一本。回家的車上看了一些,覺得很不錯,向大家推薦。

            posted @ 2006-03-25 15:38 HuYi 閱讀(431) | 評論 (0)編輯 收藏

            給大家共享一個基本算法包

            下載地址???
            http://m.shnenglu.com/Files/huyi/datastruct.rar


            包含內(nèi)容:
            下面是文檔包含的內(nèi)容:
            二分查找1.c
            二分查找2.c
            二叉樹.c
            其它

            單元加
            單循環(huán)鏈表.c
            單鏈表.c
            圖.c
            字符
            定長串.c

            小寫數(shù)字轉(zhuǎn)為大寫數(shù)字
            帶頭結(jié)點雙鏈循環(huán)線性表.c
            底層編程
            效驗算法
            數(shù)學(xué)問題
            數(shù)據(jù)結(jié)構(gòu)
            數(shù)組
            文件程序
            求進(jìn)制
            漢諾塔
            硬幣情況
            逆陣
            鏈串.c
            鏈棧.c
            鏈隊列.c
            問題算法
            順序棧.c
            順序表.c
            順序隊列.c

            ./其它:
            c語言窗體實例.zip
            傻瓜遞歸.c
            冒泡法改進(jìn).c
            小字庫DIY-.c
            小字庫DIY.c
            小白鼠鉆迷宮.c
            掃描碼.C
            挽救軟盤.c
            漢字字模.c
            神經(jīng)元模型.c
            窮舉搜索法.c
            簡單數(shù)據(jù)庫.c
            編程漢字問題.txt
            編隨機(jī)數(shù).c
            試題.C
            遞堆法.C

            ./單元加:
            erre2.c
            erre.c
            數(shù)組完全單元.c
            棧單元加.c

            ./字符:
            單詞倒轉(zhuǎn).c
            反出字符.c
            回文.c
            字符串查找.c
            字符編輯.c
            字符編輯技術(shù)(插入和刪除) .c

            ./小寫數(shù)字轉(zhuǎn)為大寫數(shù)字:
            小寫數(shù)字轉(zhuǎn)換成大寫數(shù)字1.c
            小寫數(shù)字轉(zhuǎn)換成大寫數(shù)字2.c
            小寫數(shù)字轉(zhuǎn)換成大寫數(shù)字3.c

            ./底層編程:
            asm.c
            C標(biāo)志符命名源程序.c
            ping.c
            winsock2.c
            時間陷阱.c
            檢出錯誤.c
            檢測鼠標(biāo).c

            ./效驗算法:
            C.BAT
            CMCRC.COM
            Crctable.c

            ./數(shù)學(xué)問題:
            乘法矩陣.c
            涼東問題
            十五人排序.c
            疊代整除.c
            四分砝碼.c
            圓周率
            多位階乘2.c
            多位階乘.c
            大加數(shù).c
            大小倍約.c
            大整數(shù).c
            完數(shù).c
            小孩分糖果.c
            小明買書
            平方根.c
            數(shù)學(xué)算法
            桃子猴問題
            燈塔問題.c
            百雞百錢.c
            簡單計算器.c
            蘋果糾紛
            遞推.c
            邏輯移動.c
            階乘遞歸.c
            阿姆斯特朗數(shù).c
            黑白.c

            ./數(shù)學(xué)問題/涼東問題:
            32.c
            re.c
            數(shù)組遞歸退出2.c
            數(shù)組遞歸退出.c

            ./數(shù)學(xué)問題/圓周率:
            圓周率.c
            狐貍圓周率.cpp

            ./數(shù)學(xué)問題/小明買書:
            小明買書.c
            小明買書.cpp

            ./數(shù)學(xué)問題/數(shù)學(xué)算法:
            余弦曲線.c
            余弦直線.c
            符號圖形.c
            繪制圓.c

            ./數(shù)學(xué)問題/桃子猴問題:
            _notes
            乘方函數(shù)桃子猴.c
            桃子猴.c
            猴子和桃.c
            遞歸桃猴.c
            題目.txt

            ./數(shù)學(xué)問題/桃子猴問題/_notes:

            ./數(shù)學(xué)問題/蘋果糾紛:
            ff.c
            蘋果分法.c

            ./數(shù)據(jù)結(jié)構(gòu):
            二叉排序樹.c
            二叉樹實例.c
            單鏈表
            雙鏈表正排序.c
            各種排序法.c
            哈夫曼算法.c
            哈慢樹.c
            大整數(shù).c
            建樹和遍歷.c
            排序法.c
            推箱子.c
            數(shù)據(jù)結(jié)構(gòu)2.c
            數(shù)據(jù)結(jié)構(gòu)3.c
            數(shù)據(jù)結(jié)構(gòu).c
            無向圖.c
            棧操作.c
            線性順序存儲結(jié)構(gòu).c
            線索化二叉樹.c
            迷宮.c
            迷宮問題.c
            逆波蘭計算器.c
            遞歸車廂.c
            隊列.c

            ./數(shù)據(jù)結(jié)構(gòu)/單鏈表:
            ww.c
            冒泡排序.c
            單鏈表1.c
            單鏈表2.c
            單鏈表.c
            單鏈表倒序.c
            單鏈表的處理全集.c
            建立鏈表1.c
            節(jié)點.c
            質(zhì)因子.c
            鏈表十五人排序.c
            鏈表(遞歸).c

            ./數(shù)組:
            數(shù)字移動.c
            數(shù)組操作.c
            楊輝三角形.c
            桶排序.c
            矩陣轉(zhuǎn)換.c
            螺旋數(shù)組1.c
            螺旋數(shù)組2.c

            ./文件程序:
            實例1.c
            實例2.c
            實例3.c
            文件加密.c
            文件復(fù)制.c
            文件連接.c
            自我復(fù)制.c
            讀寫文本文件.c
            輸出自已.c

            ./求進(jìn)制:
            16進(jìn)制10進(jìn)制.c
            二進(jìn)制數(shù)2.c
            二進(jìn)制數(shù).c

            ./漢諾塔:
            四塔1.c
            四塔2.c
            換位遞歸.c
            漢諾塔2.c
            漢諾塔.c
            諾漢塔畫圖版.c
            非遞歸.c

            ./硬幣情況:
            for循環(huán)的.c
            硬幣分法.c

            ./逆陣:
            簡單逆陣.c
            逆矩陣.c
            逆陣.c

            ./問題算法:
            N皇后問題回溯算法.c
            萬年歷
            動態(tài)計算網(wǎng)絡(luò)最長最短路線.c
            矩陣乘法動態(tài)規(guī)劃.c
            網(wǎng)絡(luò)最短路徑Dijkstra算法.c
            貨郎擔(dān)分枝限界圖形演示.c
            貨郎擔(dān)限界算法.c
            騎士遍歷

            ./問題算法/萬年歷:
            萬年歷.c
            萬年歷的算法 .c

            ./問題算法/騎士遍歷:
            騎士遍歷1.c
            騎士遍歷2.c
            騎士遍歷回逆.c

            posted @ 2006-03-23 08:51 HuYi 閱讀(1966) | 評論 (4)編輯 收藏

            今天買了一個共享軟件:CyberArticle

            在您上網(wǎng)的時候, 您一定會遇到很到好文章,怎么保存?用IE的保存功能?過不了多久,您就會忘記,保存在那里了。使用CyberArticle保存網(wǎng)頁,過程非常簡單,通過鼠標(biāo)右鍵,您就可以快速的將文章保存起來。還有,您可能更希望將好看的Flash動畫保存下來,這次,連IE也無能為力了。怎么辦?使用CyberArticle,您可以將這些內(nèi)容完整無缺的保存下來。
            http://www.wizissoft.com/cn/

            其實我用這個軟件很久了,真的很方便。不過我一直用的破解版:b
            今天上它主頁看了看,注冊費用挺公道的,25元,可以接受,作為對作者的支持,用信用卡在網(wǎng)上買了一份,幾分鐘注冊碼就發(fā)到了。

            向需要類似軟件的朋友推薦。

            posted @ 2006-03-22 15:18 HuYi 閱讀(384) | 評論 (0)編輯 收藏

            推薦一個sniffer - ethereal

            今天同事推薦給我的,確實比較好用,有對應(yīng)多個平臺的版本,而且是免費的。
            之前一直用的WPE,那玩意兒雖然也不錯,但老是被諾頓認(rèn)為是病毒,用ethereal就沒有這個問題了,功能也更強(qiáng)大。用來進(jìn)行少量信息收集挺不錯的。如果要7*24的收集大量信息,還是tcpdump吧。

            附上網(wǎng)址:
            http://www.ethereal.com/

            posted @ 2006-03-21 14:07 HuYi 閱讀(346) | 評論 (0)編輯 收藏

            web服務(wù)器的架構(gòu)設(shè)計

            又有感興趣的話題了:
            liu chuncheng:
            前兩天看了一篇有關(guān)IOCP的文章,里面提到apache。文章作者的觀點是用IOCP模型的IIS應(yīng)該比進(jìn)程模型的apache的性能要高。我想針對這個主題發(fā)起討論。
            首先說一下我的觀點:
            1、IOCP是windows下比較高效的一個異步IO模型,他可以克服I/O設(shè)備慢速的缺點,從而可以構(gòu)建一個高效的網(wǎng)絡(luò)通訊模型。
            2、但我認(rèn)為IOCP也不是萬能的,只有合適的應(yīng)用才會發(fā)揮他的長處。比如游戲服務(wù)器,或者流媒體服務(wù)器等。
            3、但我認(rèn)為對于web服務(wù)器它不是最好的方案,原因如下:
            ? ? a、web服務(wù)器的連接之間的數(shù)據(jù)是獨立的,沒有聯(lián)系的,那么每個連接的數(shù)據(jù)用一個線程或者進(jìn)程來處理是很高效的,處理完之后就退出了,再沒有任何其它的
            開銷。如果用IOCP那么就要放到隊列里,從線程池里面頻繁的切換線程來處理數(shù)據(jù),這種開銷還是比較大的。只是web的資源需要做同步的機(jī)制。

            b、web服務(wù)器是基于短連接的,區(qū)別于游戲服務(wù)器的長連接,就是不需要對這個連接做更多的管理。相當(dāng)于一個連接上來之后就做一個任務(wù),做完任務(wù)之后就一拍兩散
            ? ? 綜合上面的兩點,化繁為簡,我認(rèn)為對于web服務(wù)器用最簡單的網(wǎng)絡(luò)模型——1連接+1線程,可能也是比較好的方案。

            ? ? 一家之言,歡迎大家拍磚!
            http://groups.google.com/group/dev4server/browse_thread/thread/6cd19a9afc1fd295/4624a8b4bf162e6f#4624a8b4bf162e6f

            posted @ 2006-03-20 15:07 HuYi 閱讀(575) | 評論 (0)編輯 收藏

            GCC參數(shù)祥解

            [介紹]
            gcc and g++分別是gnu的c & c++編譯器 gcc/g++在執(zhí)行編譯工作的時候,總共需要4步

            1.預(yù)處理,生成.i的文件[預(yù)處理器cpp]
            2.將預(yù)處理后的文件不轉(zhuǎn)換成匯編語言,生成文件.s[編譯器egcs]
            3.有匯編變?yōu)槟繕?biāo)代碼(機(jī)器代碼)生成.o的文件[匯編器as]
            4.連接目標(biāo)代碼,生成可執(zhí)行程序[鏈接器ld]
            [參數(shù)詳解]
            -x language filename
              設(shè)定文件所使用的語言,使后綴名無效,對以后的多個有效.也就是根據(jù)約定C語言的后
            綴名稱是.c的,而C++的后綴名是.C或者.cpp,如果你很個性,決定你的C代碼文件的后綴
            名是.pig 哈哈,那你就要用這個參數(shù),這個參數(shù)對他后面的文件名都起作用,除非到了
            下一個參數(shù)的使用。
              可以使用的參數(shù)嗎有下面的這些
              `c', `objective-c', `c-header', `c++', `cpp-output', `assembler', and `a
            ssembler-with-cpp'.
              看到英文,應(yīng)該可以理解的。
              例子用法:
              gcc -x c hello.pig
              
            -x none filename
              關(guān)掉上一個選項,也就是讓gcc根據(jù)文件名后綴,自動識別文件類型
              例子用法:
              gcc -x c hello.pig -x none hello2.c
              
            -c
              只激活預(yù)處理,編譯,和匯編,也就是他只把程序做成obj文件
              例子用法:
              gcc -c hello.c
              他將生成.o的obj文件
            -S
              只激活預(yù)處理和編譯,就是指把文件編譯成為匯編代碼。
              例子用法
              gcc -S hello.c
              他將生成.s的匯編代碼,你可以用文本編輯器察看
            -E
              只激活預(yù)處理,這個不生成文件,你需要把它重定向到一個輸出文件里面.
              例子用法:
              gcc -E hello.c > pianoapan.txt
              gcc -E hello.c | more
              慢慢看吧,一個hello word 也要與處理成800行的代碼
            -o
              制定目標(biāo)名稱,缺省的時候,gcc 編譯出來的文件是a.out,很難聽,如果你和我有同感
            ,改掉它,哈哈
              例子用法
              gcc -o hello.exe hello.c (哦,windows用習(xí)慣了)
              gcc -o hello.asm -S hello.c
            -pipe
              使用管道代替編譯中臨時文件,在使用非gnu匯編工具的時候,可能有些問題
              gcc -pipe -o hello.exe hello.c
            -ansi
              關(guān)閉gnu c中與ansi c不兼容的特性,激活ansi c的專有特性(包括禁止一些asm inl
            ine typeof關(guān)鍵字,以及UNIX,vax等預(yù)處理宏,
            -fno-asm
              此選項實現(xiàn)ansi選項的功能的一部分,它禁止將asm,inline和typeof用作關(guān)鍵字。
                
            -fno-strict-prototype
              只對g++起作用,使用這個選項,g++將對不帶參數(shù)的函數(shù),都認(rèn)為是沒有顯式的對參數(shù)
            的個數(shù)和類型說明,而不是沒有參數(shù).
              而gcc無論是否使用這個參數(shù),都將對沒有帶參數(shù)的函數(shù),認(rèn)為城沒有顯式說明的類型

              
            -fthis-is-varialble
              就是向傳統(tǒng)c++看齊,可以使用this當(dāng)一般變量使用.
              
            -fcond-mismatch
              允許條件表達(dá)式的第二和第三參數(shù)類型不匹配,表達(dá)式的值將為void類型
              
            -funsigned-char
            -fno-signed-char
            -fsigned-char
            -fno-unsigned-char
              這四個參數(shù)是對char類型進(jìn)行設(shè)置,決定將char類型設(shè)置成unsigned char(前兩個參
            數(shù))或者 signed char(后兩個參數(shù))
              
            -include file
              包含某個代碼,簡單來說,就是便以某個文件,需要另一個文件的時候,就可以用它設(shè)
            定,功能就相當(dāng)于在代碼中使用#include<filename>
              例子用法:
              gcc hello.c -include /root/pianopan.h
              
            -imacros file
              將file文件的宏,擴(kuò)展到gcc/g++的輸入文件,宏定義本身并不出現(xiàn)在輸入文件中
              
            -Dmacro
              相當(dāng)于C語言中的#define macro
              
            -Dmacro=defn
              相當(dāng)于C語言中的#define macro=defn
              
            -Umacro
              相當(dāng)于C語言中的#undef macro
            -undef
              取消對任何非標(biāo)準(zhǔn)宏的定義
              
            -Idir
              在你是用#include"file"的時候,gcc/g++會先在當(dāng)前目錄查找你所制定的頭文件,如
            果沒有找到,他回到缺省的頭文件目錄找,如果使用-I制定了目錄,他
              回先在你所制定的目錄查找,然后再按常規(guī)的順序去找.
              對于#include<file>,gcc/g++會到-I制定的目錄查找,查找不到,然后將到系統(tǒng)的缺
            省的頭文件目錄查找
              
            -I-
              就是取消前一個參數(shù)的功能,所以一般在-Idir之后使用
              
            -idirafter dir
              在-I的目錄里面查找失敗,講到這個目錄里面查找.
              
            -iprefix prefix
            -iwithprefix dir
              一般一起使用,當(dāng)-I的目錄查找失敗,會到prefix+dir下查找
              
            -nostdinc
              使編譯器不再系統(tǒng)缺省的頭文件目錄里面找頭文件,一般和-I聯(lián)合使用,明確限定頭
            文件的位置
              
            -nostdin C++
              規(guī)定不在g++指定的標(biāo)準(zhǔn)路經(jīng)中搜索,但仍在其他路徑中搜索,.此選項在創(chuàng)libg++庫
            使用
              
            -C
              在預(yù)處理的時候,不刪除注釋信息,一般和-E使用,有時候分析程序,用這個很方便的

              
            -M
              生成文件關(guān)聯(lián)的信息。包含目標(biāo)文件所依賴的所有源代碼你可以用gcc -M hello.c
            來測試一下,很簡單。
              
            -MM
              和上面的那個一樣,但是它將忽略由#include<file>造成的依賴關(guān)系。
              
            -MD
              和-M相同,但是輸出將導(dǎo)入到.d的文件里面
              
            -MMD
              和-MM相同,但是輸出將導(dǎo)入到.d的文件里面
              
            -Wa,option
              此選項傳遞option給匯編程序;如果option中間有逗號,就將option分成多個選項,然
            后傳遞給會匯編程序
              
            -Wl.option
              此選項傳遞option給連接程序;如果option中間有逗號,就將option分成多個選項,然
            后傳遞給會連接程序.
              
            -llibrary
              制定編譯的時候使用的庫
              例子用法
              gcc -lcurses hello.c
              使用ncurses庫編譯程序
              
            -Ldir
              制定編譯的時候,搜索庫的路徑。比如你自己的庫,可以用它制定目錄,不然
              編譯器將只在標(biāo)準(zhǔn)庫的目錄找。這個dir就是目錄的名稱。
              
            -O0
            -O1
            -O2
            -O3
              編譯器的優(yōu)化選項的4個級別,-O0表示沒有優(yōu)化,-O1為缺省值,-O3優(yōu)化級別最高 
                
            -g
              只是編譯器,在編譯的時候,產(chǎn)生調(diào)試信息。
              
            -gstabs
              此選項以stabs格式聲稱調(diào)試信息,但是不包括gdb調(diào)試信息.
              
            -gstabs+
              此選項以stabs格式聲稱調(diào)試信息,并且包含僅供gdb使用的額外調(diào)試信息.
              
            -ggdb
              此選項將盡可能的生成gdb的可以使用的調(diào)試信息.
            -static
              此選項將禁止使用動態(tài)庫,所以,編譯出來的東西,一般都很大,也不需要什么
            動態(tài)連接庫,就可以運行.
            -share
              此選項將盡量使用動態(tài)庫,所以生成文件比較小,但是需要系統(tǒng)由動態(tài)庫.
            -traditional
              試圖讓編譯器支持傳統(tǒng)的C語言特性
            [參考資料]
            -Linux/UNIX高級編程
              中科紅旗軟件技術(shù)有限公司編著.清華大學(xué)出版社出版
            -Gcc man page
              
            [ChangeLog]
            -2002-08-10
              ver 0.1 發(fā)布最初的文檔
            -2002-08-11
              ver 0.11 修改文檔格式
            -2002-08-12
              ver 0.12 加入了對靜態(tài)庫,動態(tài)庫的參數(shù)
            -2002-08-16
              ver 0.16 增加了gcc編譯的4個階段的命令
            運行 gcc/egcs
            **********運行 gcc/egcs***********************
              GCC 是 GNU 的 C 和 C++ 編譯器。實際上,GCC 能夠編譯三種語言:C、C++ 和 O
            bject C(C 語言的一種面向?qū)ο髷U(kuò)展)。利用 gcc 命令可同時編譯并連接 C 和 C++
            源程序。
              如果你有兩個或少數(shù)幾個 C 源文件,也可以方便地利用 GCC 編譯、連接并生成可
            執(zhí)行文件。例如,假設(shè)你有兩個源文件 main.c 和 factorial.c 兩個源文件,現(xiàn)在要編
            譯生成一個計算階乘的程序。
            代碼:
            -----------------------
            清單 factorial.c
            -----------------------
            int factorial (int n)
            {
              if (n <= 1)
               return 1;
              else
               return factorial (n - 1) * n;
            }
            -----------------------
            清單 main.c
            -----------------------
            #include <stdio.h>
            #include <unistd.h>
            int factorial (int n);
            int main (int argc, char **argv)
            {
              int n;
              if (argc < 2)
              {
                printf ("Usage: %s n\n", argv [0]);
                return -1;
              }
              else
              {
               n = atoi (argv[1]);
               printf ("Factorial of %d is %d.\n", n, factorial (n));
               }
              return 0;
            }
            -----------------------
            利用如下的命令可編譯生成可執(zhí)行文件,并執(zhí)行程序:
            $ gcc -o factorial main.c factorial.c
            $ ./factorial 5
            Factorial of 5 is 120.
              GCC 可同時用來編譯 C 程序和 C++ 程序。一般來說,C 編譯器通過源文件的后綴
            名來判斷是 C 程序還是 C++ 程序。在 Linux 中,C 源文件的后綴名為 .c,而 C++ 源
            文件的后綴名為 .C 或 .cpp。但是,gcc 命令只能編譯 C++ 源文件,而不能自動和 C
            ++ 程序使用的庫連接。因此,通常使用 g++ 命令來完成 C++ 程序的編譯和連接,該程
            序會自動調(diào)用 gcc 實現(xiàn)編譯。假設(shè)我們有一個如下的 C++ 源文件(hello.C):
            #include <iostream>
            void main (void)
            {
              cout << "Hello, world!" << endl;
            }
            則可以如下調(diào)用 g++ 命令編譯、連接并生成可執(zhí)行文件:
            $ g++ -o hello hello.C
            $ ./hello
            Hello, world!
            **********************gcc/egcs 的主要選項*********
            gcc 命令的常用選項
            選項 解釋
            -ansi 只支持 ANSI 標(biāo)準(zhǔn)的 C 語法。這一選項將禁止 GNU C 的某些特色,
            例如 asm 或 typeof 關(guān)鍵詞。
            -c 只編譯并生成目標(biāo)文件。
            -DMACRO 以字符串“1”定義 MACRO 宏。
            -DMACRO=DEFN 以字符串“DEFN”定義 MACRO 宏。
            -E 只運行 C 預(yù)編譯器。
            -g 生成調(diào)試信息。GNU 調(diào)試器可利用該信息。
            -IDIRECTORY 指定額外的頭文件搜索路徑DIRECTORY。
            -LDIRECTORY 指定額外的函數(shù)庫搜索路徑DIRECTORY。
            -lLIBRARY 連接時搜索指定的函數(shù)庫LIBRARY。
            -m486 針對 486 進(jìn)行代碼優(yōu)化。
            -o FILE 生成指定的輸出文件。用在生成可執(zhí)行文件時。
            -O0 不進(jìn)行優(yōu)化處理。
            -O 或 -O1 優(yōu)化生成代碼。
            -O2 進(jìn)一步優(yōu)化。
            -O3 比 -O2 更進(jìn)一步優(yōu)化,包括 inline 函數(shù)。
            -shared 生成共享目標(biāo)文件。通常用在建立共享庫時。
            -static 禁止使用共享連接。
            -UMACRO 取消對 MACRO 宏的定義。
            -w 不生成任何警告信息。
            -Wall 生成所有警告信息。

            posted @ 2006-03-20 10:30 HuYi 閱讀(527) | 評論 (1)編輯 收藏

            cyrus_sasl API使用方法

            /* ?This?is?a?proposed?C?API?for?support?of?SASL
            ?*
            ?*********************************IMPORTANT*******************************
            ?*?send?email?to?chris.newman@innosoft.com?and?cyrus-bugs@andrew.cmu.edu?*
            ?*?if?you?need?to?add?new?error?codes,?callback?types,?property?values,??*
            ?*?etc.???It?is?important?to?keep?the?multiple?implementations?of?this???*
            ?*?API?from?diverging.???????????????????????????????????????????????????*
            ?*********************************IMPORTANT*******************************
            ?*
            ?*?Basic?Type?Summary:
            ?*??sasl_conn_t???????Context?for?a?SASL?connection?negotiation
            ?*??sasl_ssf_t????????Security?layer?Strength?Factor
            ?*??sasl_callback_t???A?typed?client/server?callback?function?and?context
            ?*??sasl_interact_t???A?client?interaction?descriptor
            ?*??sasl_secret_t?????A?client?password
            ?*??sasl_rand_t???????Random?data?context?structure
            ?*??sasl_security_properties_t??An?application's?required?security?level
            ?*
            ?*?Callbacks:
            ?*??sasl_getopt_t?????client/server:?Get?an?option?value
            ?*??sasl_logmsg_t?????client/server:?Log?message?handler
            ?*??sasl_getsimple_t??client:?Get?user/language?list
            ?*??sasl_getsecret_t??client:?Get?authentication?secret
            ?*??sasl_chalprompt_t?client:?Display?challenge?and?prompt?for?response
            ?*
            ?*?Server?only?Callbacks:
            ?*??sasl_authorize_t?????????????user?authorization?policy?callback
            ?*??sasl_server_userdb_checkpass?check?password?and?auxprops?in?userdb
            ?*??sasl_server_userdb_setpass???set?password?in?userdb
            ?*??sasl_server_canon_user???????canonicalize?username?routine
            ?*
            ?*?Client/Server?Function?Summary:
            ?*??sasl_done?????????Release?all?SASL?global?state
            ?*??sasl_dispose??????Connection?done:?Dispose?of?sasl_conn_t
            ?*??sasl_getprop??????Get?property?(e.g.,?user?name,?security?layer?info)
            ?*??sasl_setprop??????Set?property?(e.g.,?external?ssf)
            ?*??sasl_errdetail????Generate?string?from?last?error?on?connection
            ?*??sasl_errstring????Translate?sasl?error?code?to?a?string
            ?*??sasl_encode???????Encode?data?to?send?using?security?layer
            ?*??sasl_decode???????Decode?data?received?using?security?layer
            ?*??
            ?*?Utility?functions:
            ?*??sasl_encode64?????Encode?data?to?send?using?MIME?base64?encoding
            ?*??sasl_decode64?????Decode?data?received?using?MIME?base64?encoding
            ?*??sasl_erasebuffer??Erase?a?buffer
            ?*
            ?*?Client?Function?Summary:
            ?*??sasl_client_init??Load?and?initialize?client?plug-ins?(call?once)
            ?*??sasl_client_new???Initialize?client?connection?context:?sasl_conn_t
            ?*??sasl_client_start?Select?mechanism?for?connection
            ?*??sasl_client_step??Perform?one?authentication?step
            ?*
            ?*?Server?Function?Summary
            ?*??sasl_server_init??Load?and?initialize?server?plug-ins?(call?once)
            ?*??sasl_server_new???Initialize?server?connection?context:?sasl_conn_t
            ?*??sasl_listmech?????Create?list?of?available?mechanisms
            ?*??sasl_server_start?Begin?an?authentication?exchange
            ?*??sasl_server_step??Perform?one?authentication?exchange?step
            ?*??sasl_checkpass????Check?a?plaintext?passphrase
            ?*??sasl_checkapop????Check?an?APOP?challenge/response?(uses?pseudo?"APOP"
            ?*????????????????????mechanism?similar?to?CRAM-MD5?mechanism;?optional)
            ?*??sasl_user_exists??Check?if?user?exists
            ?*??sasl_setpass??????Change?a?password?or?add?a?user?entry
            ?*??sasl_auxprop_request??Request?auxiliary?properties
            ?*??sasl_auxprop_getctx???Get?auxiliary?property?context?for?connection
            ?*??sasl_auxprop_store????Store?a?set?of?auxiliary?properties
            ?*
            ?*?Basic?client?model:
            ?*??1.?client?calls?sasl_client_init()?at?startup?to?load?plug-ins
            ?*??2.?when?connection?formed,?call?sasl_client_new()
            ?*??3.?once?list?of?supported?mechanisms?received?from?server,?client
            ?*?????calls?sasl_client_start().??goto?4a
            ?*??4.?client?calls?sasl_client_step()
            ?*?[4a.?If?SASL_INTERACT,?fill?in?prompts?and?goto?4
            ?*??????--?doesn't?happen?if?callbacks?provided]
            ?*??4b.?If?SASL?error,?goto?7?or?3
            ?*??4c.?If?SASL_OK,?continue?or?goto?6?if?last?server?response?was?success
            ?*??5.?send?message?to?server,?wait?for?response
            ?*??5a.?On?data?or?success?with?server?response,?goto?4
            ?*??5b.?On?failure?goto?7?or?3
            ?*??5c.?On?success?with?no?server?response?continue
            ?*??6.?continue?with?application?protocol?until?connection?closes
            ?*?????call?sasl_getprop/sasl_encode/sasl_decode()?if?using?security?layer
            ?*??7.?call?sasl_dispose(),?may?return?to?step?2
            ?*??8.?call?sasl_done()?when?program?terminates
            ?*
            ?*?Basic?Server?model:
            ?*??1.?call?sasl_server_init()?at?startup?to?load?plug-ins
            ?*??2.?On?connection,?call?sasl_server_new()
            ?*??3.?call?sasl_listmech()?and?send?list?to?client]
            ?*??4.?after?client?AUTH?command,?call?sasl_server_start(),?goto?5a
            ?*??5.?call?sasl_server_step()
            ?*??5a.?If?SASL_CONTINUE,?output?to?client,?wait?response,?repeat?5
            ?*??5b.?If?SASL?error,?then?goto?7
            ?*??5c.?If?SASL_OK,?move?on
            ?*??6.?continue?with?application?protocol?until?connection?closes
            ?*?????call?sasl_getprop?to?get?username
            ?*?????call?sasl_getprop/sasl_encode/sasl_decode()?if?using?security?layer
            ?*??7.?call?sasl_dispose(),?may?return?to?step?2
            ?*??8.?call?sasl_done()?when?program?terminates
            ?*
            ?*************************************************
            從sasl.h中截取的。

            posted @ 2006-03-19 11:21 HuYi 閱讀(681) | 評論 (0)編輯 收藏

            僅列出標(biāo)題
            共7頁: 1 2 3 4 5 6 7 

            導(dǎo)航

            統(tǒng)計

            常用鏈接

            留言簿(12)

            隨筆分類

            相冊

            收藏夾

            友情鏈接

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            久久久久99精品成人片欧美| 色偷偷偷久久伊人大杳蕉| 一本伊大人香蕉久久网手机| 好久久免费视频高清| 国产成人99久久亚洲综合精品| 99久久精品免费看国产一区二区三区| 精品国产91久久久久久久a| 国产69精品久久久久APP下载 | 久久久久国产精品人妻| 国产产无码乱码精品久久鸭| 久久一区二区免费播放| 久久国产精品无码一区二区三区 | 欧美va久久久噜噜噜久久| 国产亚洲婷婷香蕉久久精品| 亚洲一区精品伊人久久伊人| 国产欧美一区二区久久| 久久久久久久久久久精品尤物| 久久亚洲综合色一区二区三区| 狠狠精品久久久无码中文字幕| 久久93精品国产91久久综合 | 国产—久久香蕉国产线看观看| 亚洲国产日韩综合久久精品| 99久久精品免费看国产一区二区三区| 无码AV中文字幕久久专区| 久久99精品久久久久久秒播| 国产一区二区三区久久| 色综合久久久久无码专区| 久久天天躁夜夜躁狠狠| 亚洲欧洲久久久精品| 久久久久久久综合日本| 国产高潮国产高潮久久久91| 久久99国产精品久久久| 久久精品午夜一区二区福利| 亚洲精品无码久久千人斩| 狠狠色噜噜色狠狠狠综合久久| 久久99热这里只频精品6| 日韩美女18网站久久精品| 久久综合色区| 日日狠狠久久偷偷色综合免费| 日本高清无卡码一区二区久久| 国产精品久久久久久久人人看|