• <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.關閉位:關閉特定位,但不影響其他位
            flags?&=?~MASK
            11100101 &=? ~10000000 = 01100101

            4.轉置位:一個位如果打開,則關閉;如果關閉,則打開
            flags?^=?MASK
            11100101 ^=? 10000000 = 01100101
            11100101 ^=? 00010000 = 11110101

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

            ?

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

            TIM中網絡模型變更

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

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

            [2006.03.26]噩耗傳來

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

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

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

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

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

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

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


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

            單元加
            單循環鏈表.c
            單鏈表.c
            圖.c
            字符
            定長串.c

            小寫數字轉為大寫數字
            帶頭結點雙鏈循環線性表.c
            底層編程
            效驗算法
            數學問題
            數據結構
            數組
            文件程序
            求進制
            漢諾塔
            硬幣情況
            逆陣
            鏈串.c
            鏈棧.c
            鏈隊列.c
            問題算法
            順序棧.c
            順序表.c
            順序隊列.c

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

            ./單元加:
            erre2.c
            erre.c
            數組完全單元.c
            棧單元加.c

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

            ./小寫數字轉為大寫數字:
            小寫數字轉換成大寫數字1.c
            小寫數字轉換成大寫數字2.c
            小寫數字轉換成大寫數字3.c

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

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

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

            ./數學問題/涼東問題:
            32.c
            re.c
            數組遞歸退出2.c
            數組遞歸退出.c

            ./數學問題/圓周率:
            圓周率.c
            狐貍圓周率.cpp

            ./數學問題/小明買書:
            小明買書.c
            小明買書.cpp

            ./數學問題/數學算法:
            余弦曲線.c
            余弦直線.c
            符號圖形.c
            繪制圓.c

            ./數學問題/桃子猴問題:
            _notes
            乘方函數桃子猴.c
            桃子猴.c
            猴子和桃.c
            遞歸桃猴.c
            題目.txt

            ./數學問題/桃子猴問題/_notes:

            ./數學問題/蘋果糾紛:
            ff.c
            蘋果分法.c

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

            ./數據結構/單鏈表:
            ww.c
            冒泡排序.c
            單鏈表1.c
            單鏈表2.c
            單鏈表.c
            單鏈表倒序.c
            單鏈表的處理全集.c
            建立鏈表1.c
            節點.c
            質因子.c
            鏈表十五人排序.c
            鏈表(遞歸).c

            ./數組:
            數字移動.c
            數組操作.c
            楊輝三角形.c
            桶排序.c
            矩陣轉換.c
            螺旋數組1.c
            螺旋數組2.c

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

            ./求進制:
            16進制10進制.c
            二進制數2.c
            二進制數.c

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

            ./硬幣情況:
            for循環的.c
            硬幣分法.c

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

            ./問題算法:
            N皇后問題回溯算法.c
            萬年歷
            動態計算網絡最長最短路線.c
            矩陣乘法動態規劃.c
            網絡最短路徑Dijkstra算法.c
            貨郎擔分枝限界圖形演示.c
            貨郎擔限界算法.c
            騎士遍歷

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

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

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

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

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

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

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

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

            推薦一個sniffer - ethereal

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

            附上網址:
            http://www.ethereal.com/

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

            web服務器的架構設計

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

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

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

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

            GCC參數祥解

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

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

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

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

            posted @ 2006-03-20 10:30 HuYi 閱讀(524) | 評論 (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 閱讀(675) | 評論 (0)編輯 收藏

            僅列出標題
            共7頁: 1 2 3 4 5 6 7 

            導航

            統計

            常用鏈接

            留言簿(12)

            隨筆分類

            相冊

            收藏夾

            友情鏈接

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            青草国产精品久久久久久| 国内精品久久久久影院网站 | 久久se精品一区二区| 97久久精品无码一区二区天美| 97久久久久人妻精品专区| 久久久久久综合一区中文字幕| 精品久久久久中文字幕一区| 久久经典免费视频| 久久久久av无码免费网| 久久久久亚洲av无码专区| 精品久久久久久99人妻| 久久久久久精品免费看SSS| 99久久国产热无码精品免费| 精品久久人人做人人爽综合| 久久精品人人做人人爽电影蜜月| 国产—久久香蕉国产线看观看| 久久国产一区二区| 99久久精品免费看国产一区二区三区 | 欧美大战日韩91综合一区婷婷久久青草| 久久天天躁狠狠躁夜夜网站| 婷婷久久综合九色综合九七| 久久国产乱子精品免费女| 久久久久亚洲AV无码专区首JN| 精品国产综合区久久久久久| 久久精品国产亚洲AV电影| 久久久久青草线蕉综合超碰| 色婷婷狠狠久久综合五月| 99久久婷婷国产一区二区| 人妻少妇久久中文字幕一区二区| 欧美激情精品久久久久久久| 国产精品久久久久久久午夜片| 国产午夜久久影院| 久久亚洲私人国产精品vA| 欧美国产成人久久精品| 欧美日韩久久中文字幕| 久久无码AV一区二区三区| 久久久精品日本一区二区三区| 99久久国产亚洲高清观看2024 | 国内精品久久久久久久久电影网| 久久青青草视频| 午夜天堂av天堂久久久|