97久久精品人人澡人人爽,日韩AV无码久久一区二区,人人狠狠综合久久亚洲http://www.shnenglu.com/vliuchao/Just Dive Into!zh-cnThu, 08 May 2025 17:06:22 GMTThu, 08 May 2025 17:06:22 GMT60MySQL在linux中的安裝和后續(xù)http://www.shnenglu.com/vliuchao/archive/2011/04/24/144899.htmlRichard LiuRichard LiuSun, 24 Apr 2011 06:06:00 GMThttp://www.shnenglu.com/vliuchao/archive/2011/04/24/144899.htmlhttp://www.shnenglu.com/vliuchao/comments/144899.htmlhttp://www.shnenglu.com/vliuchao/archive/2011/04/24/144899.html#Feedback0http://www.shnenglu.com/vliuchao/comments/commentRss/144899.htmlhttp://www.shnenglu.com/vliuchao/services/trackbacks/144899.htmlcentos的安裝盤帶了mysql的安裝,安裝以后,mysql實(shí)際上還是需要配置的,前兩天折騰了半天,寫下過程來供以后在搞的時(shí)候備忘:
1 安裝centos是自定義安裝軟件包,選擇服務(wù)器中的Mysql
2 安裝以后,需要做一些配置,首先在centos的界面選擇 管理 服務(wù)(services)開啟MySql的服務(wù),當(dāng)然也可以 services mysqld start,不過在終端用命令開啟下一次重啟還需要再輸入,還是再界面配置不錯(cuò)的,網(wǎng)上看了一下似乎也可以拷貝文件到etc的某一個(gè)目錄也可以實(shí)現(xiàn)開機(jī)啟動(dòng)服務(wù),不過有界面使用,何必折騰那玩意。
3 此時(shí)的mysql通過MySQL-Front或mysql administrator連接mysql的時(shí)候發(fā)生錯(cuò)誤ERROR 1130: Host ***.***.***.*** is not allowed to connect to this MySQL server
  說明所連接的用戶帳號(hào)沒有遠(yuǎn)程連接的權(quán)限,只能在本機(jī)(localhost)登錄。需更改 mysql 數(shù)據(jù)庫(kù)里的 user表里的 host項(xiàng)把localhost改稱%
4具體步驟:登陸到mysql
1)mysql> use mysql;
按照別人提供的方式update的時(shí)候,出現(xiàn)錯(cuò)誤。
mysql> update user set host='%' where user = 'root';
ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY'
然后查看了下數(shù)據(jù)庫(kù)的host信息如下:
2)mysql> select host from user where user = 'root';
+-----------------------+
| host |
+-----------------------+
| % |
| 127.0.0.1 |
| localhost.localdomain |
+-----------------------+
3 rows in set (0.00 sec)
host已經(jīng)有了%這個(gè)值,所以直接運(yùn)行命令:
3)mysql>flush privileges;
ps:別忘了每次輸入后面的;
5 再用mysql administrator連接.,用戶名root密碼為空,可以連接上了 建立本機(jī)用戶和遠(yuǎn)程訪問用戶就可以了。



Richard Liu 2011-04-24 14:06 發(fā)表評(píng)論
]]>
RTMP協(xié)議詳解(三)http://www.shnenglu.com/vliuchao/archive/2009/12/30/104422.htmlRichard LiuRichard LiuTue, 29 Dec 2009 16:15:00 GMThttp://www.shnenglu.com/vliuchao/archive/2009/12/30/104422.htmlhttp://www.shnenglu.com/vliuchao/comments/104422.htmlhttp://www.shnenglu.com/vliuchao/archive/2009/12/30/104422.html#Feedback14http://www.shnenglu.com/vliuchao/comments/commentRss/104422.htmlhttp://www.shnenglu.com/vliuchao/services/trackbacks/104422.html閱讀全文

Richard Liu 2009-12-30 00:15 發(fā)表評(píng)論
]]>
RTMP協(xié)議詳解(二)http://www.shnenglu.com/vliuchao/archive/2009/12/29/104323.htmlRichard LiuRichard LiuMon, 28 Dec 2009 16:45:00 GMThttp://www.shnenglu.com/vliuchao/archive/2009/12/29/104323.htmlhttp://www.shnenglu.com/vliuchao/comments/104323.htmlhttp://www.shnenglu.com/vliuchao/archive/2009/12/29/104323.html#Feedback0http://www.shnenglu.com/vliuchao/comments/commentRss/104323.htmlhttp://www.shnenglu.com/vliuchao/services/trackbacks/104323.html閱讀全文

Richard Liu 2009-12-29 00:45 發(fā)表評(píng)論
]]>
RTMP協(xié)議詳解(一)http://www.shnenglu.com/vliuchao/archive/2009/12/27/104163.htmlRichard LiuRichard LiuSat, 26 Dec 2009 16:53:00 GMThttp://www.shnenglu.com/vliuchao/archive/2009/12/27/104163.htmlhttp://www.shnenglu.com/vliuchao/comments/104163.htmlhttp://www.shnenglu.com/vliuchao/archive/2009/12/27/104163.html#Feedback8http://www.shnenglu.com/vliuchao/comments/commentRss/104163.htmlhttp://www.shnenglu.com/vliuchao/services/trackbacks/104163.html

Real Time Messaging Protocol(實(shí)時(shí)消息傳送協(xié)議協(xié)議)Adobe Systems公司為Flash播放器和服務(wù)器之間音頻、視頻和數(shù)據(jù)傳輸開發(fā)的私有協(xié)議。

具體使用RTMPAS代碼大概如下:

  var videoInstance:Video = your_video_instance;

  var nc:NetConnection = new NetConnection();

  var connected:Boolean = nc.connect("rtmp://localhost/myapp");

  var ns:NetStream = new NetStream(nc);

  videoInstance.attachVideo(ns);

ns.play("flvName");

Adobe也在官方網(wǎng)站已經(jīng)提供了RTMP協(xié)議的官方文檔說明,為什么要寫這個(gè)系列文章最大的原因只是對(duì)前一段工作的一個(gè)總結(jié)和回顧,最近兩個(gè)月,實(shí)現(xiàn)了一個(gè)RTMP Serverc++版本,把公司的流媒體服務(wù)和flash無縫對(duì)接起來。希望我的文字能給后來研究這個(gè)協(xié)議的同學(xué)有一定的幫助。

RTMP協(xié)議是一個(gè)基于TCP的高層協(xié)議族,當(dāng)然這個(gè)玩意據(jù)說還有UDP協(xié)議版本的,不過現(xiàn)在還沒有出來,好像Adobe下一版本的FMS會(huì)提供支持。下文將要描述的是TCP協(xié)議版本的協(xié)議。

   RTMP協(xié)議的概要理解:

RTMP協(xié)議是為了和flash之間交換信令以及媒體數(shù)據(jù)。為了提高使用效率信令和媒體數(shù)據(jù)都是使用相同的機(jī)制。因?yàn)槭窍嗤臋C(jī)制Adobe就整出來了一些比較搞人的概念,當(dāng)然每個(gè)協(xié)議第一次接觸都是比較難理解的。

        RTMP協(xié)議中信令和媒體數(shù)據(jù)都稱之為Message,在網(wǎng)絡(luò)中傳輸這些Message,為了區(qū)分它們肯定是要加一個(gè)Message  head的,所以RTMP協(xié)議也有一個(gè)Message head,還有一個(gè)問題因?yàn)?/span>RTMP協(xié)議是基于TCP的,由于TCP的包長(zhǎng)度是有限制的(一般來說不超過1500個(gè)字節(jié)),而RTMPMessage長(zhǎng)度是有可能很大的,像一個(gè)視頻幀的包可能會(huì)有幾十甚至幾千K,這個(gè)問題就必然有一個(gè)分片的問題,在RTMP協(xié)議中對(duì)應(yīng)的說法就是chunk,每一個(gè)Message + head都是由一個(gè)和多個(gè)chunk組成的。到這里對(duì)RTMP協(xié)議的概要理解就算完了。



Richard Liu 2009-12-27 00:53 發(fā)表評(píng)論
]]>
精確地計(jì)時(shí)方式,可以用來評(píng)判算法的運(yùn)行時(shí)間http://www.shnenglu.com/vliuchao/archive/2009/05/28/86052.htmlRichard LiuRichard LiuThu, 28 May 2009 15:17:00 GMThttp://www.shnenglu.com/vliuchao/archive/2009/05/28/86052.htmlhttp://www.shnenglu.com/vliuchao/comments/86052.htmlhttp://www.shnenglu.com/vliuchao/archive/2009/05/28/86052.html#Feedback0http://www.shnenglu.com/vliuchao/comments/commentRss/86052.htmlhttp://www.shnenglu.com/vliuchao/services/trackbacks/86052.html    在做涉及到算法的時(shí)候,想驗(yàn)證一下算法的實(shí)現(xiàn)優(yōu)劣的時(shí)候總是需要一個(gè)算法的計(jì)算時(shí)間的判斷的,可惜Windows和linux等操作系統(tǒng)提供的記時(shí)貌似都不是很準(zhǔn),這個(gè)可能和現(xiàn)在的操作系統(tǒng)的時(shí)間片輪轉(zhuǎn)有關(guān)吧,也可能是我比較老土啦,反正我一直在x86體系的機(jī)器上是沒有找到太好的計(jì)時(shí)方式的,最近偶然和同事聊天的時(shí)候知道了一個(gè)比較精確地記時(shí)方式,感覺不錯(cuò)哦,使用的是CPU指令級(jí)別的判定應(yīng)該是比較準(zhǔn)的哦,Windows系統(tǒng)的代碼如下
1   inline unsigned __int64 GetCycleCount() 
2 
3     __asm _emit 0x0F 
4     __asm _emit 0x31 
5 
簡(jiǎn)單的幾句,在VC下面是可以編譯通過的哦,算出來的結(jié)果是系統(tǒng)開機(jī)以來的CPU時(shí)鐘節(jié)拍數(shù),理論上說這個(gè)結(jié)果應(yīng)該是比較準(zhǔn)的哦,至于是不是CPU時(shí)鐘節(jié)拍那我也不是很清楚啦?感覺好像是這么個(gè)名詞哦,以前學(xué)的組成原理忘得差不多了哦,不過我可以確定的是算出來的最終結(jié)果的計(jì)量單位是一個(gè)CPU時(shí)鐘周期的八分之一。
    同樣的在linux系統(tǒng)下面也有類似的方式,對(duì)應(yīng)的實(shí)現(xiàn)方法
  __inline__ unsigned long long int rdtsc()
   {
     __asm__ volatile (".byte 0x0f, 0x31");
   }


Richard Liu 2009-05-28 23:17 發(fā)表評(píng)論
]]>
多線程編程學(xué)習(xí)筆記(1)- 進(jìn)程和線程的異同http://www.shnenglu.com/vliuchao/archive/2009/01/10/71677.htmlRichard LiuRichard LiuSat, 10 Jan 2009 13:17:00 GMThttp://www.shnenglu.com/vliuchao/archive/2009/01/10/71677.htmlhttp://www.shnenglu.com/vliuchao/comments/71677.htmlhttp://www.shnenglu.com/vliuchao/archive/2009/01/10/71677.html#Feedback0http://www.shnenglu.com/vliuchao/comments/commentRss/71677.htmlhttp://www.shnenglu.com/vliuchao/services/trackbacks/71677.html線程和進(jìn)程都有ID,寄存器組,狀態(tài),優(yōu)先權(quán),信息塊。
線程和進(jìn)程都與父進(jìn)程共享資源。
線程和進(jìn)程在創(chuàng)建以后都是獨(dú)立的實(shí)體。
進(jìn)程和線程的創(chuàng)建者對(duì)其擁有控制權(quán)。
進(jìn)程和線程都可以在創(chuàng)建以后修改屬性和創(chuàng)建新的資源。
進(jìn)程和線程都不可以訪問其他與自己無關(guān)的進(jìn)程和線程的資源。
進(jìn)程和線程的不同之處:
進(jìn)程有一個(gè)自己的地址空間,線程沒有自己的地址空間。
父進(jìn)程和子進(jìn)程通信必須使用進(jìn)程間的通信機(jī)制,而父進(jìn)程和子線程進(jìn)行通信就可以直接通信,同一進(jìn)程的線程可以直接寫入和讀取讀取進(jìn)程的變量。
子進(jìn)程不可以對(duì)其他子進(jìn)程進(jìn)行影響,子線程可以對(duì)其他子線程進(jìn)行影響。
子進(jìn)程不可以對(duì)父進(jìn)程施加控制,進(jìn)程的所有子線程都可以對(duì)主線程施加控制,并影響整個(gè)進(jìn)程。


Richard Liu 2009-01-10 21:17 發(fā)表評(píng)論
]]>
MFC中一個(gè)小技巧---獲取窗口所有的同類控件http://www.shnenglu.com/vliuchao/archive/2008/12/24/70276.htmlRichard LiuRichard LiuWed, 24 Dec 2008 13:40:00 GMThttp://www.shnenglu.com/vliuchao/archive/2008/12/24/70276.htmlhttp://www.shnenglu.com/vliuchao/comments/70276.htmlhttp://www.shnenglu.com/vliuchao/archive/2008/12/24/70276.html#Feedback0http://www.shnenglu.com/vliuchao/comments/commentRss/70276.htmlhttp://www.shnenglu.com/vliuchao/services/trackbacks/70276.html   最近寫一個(gè)小的工具,用到MFC做界面,窗口中有很多Edit控件,來處理用戶的輸入值,在初始狀態(tài)是不可見的,按下Button應(yīng)該有一個(gè)響應(yīng)顯示所有Edit控件,剛開始的時(shí)候想直接調(diào)用 ShowWindow了事,可是實(shí)在是控件太多了哦,一個(gè)一個(gè)寫確實(shí)很麻煩哦,不知道有什么好方法,問了一下非哥,想不到真的有一種好的方法可以解決這樣的需求,非哥不愧為MFC活化石
CWnd *pWnd = this->GetWindow( GW_CHILD );
while( pWnd )
{
  
if( pWnd->IsKindOf( RUNTIME_CLASS(CEdit) ) )
      pWnd
->ShowWindow(SW_SHOW);
       pWnd 
= pWnd->GetWindow( GW_HWNDNEXT );
}
上面的代碼實(shí)現(xiàn)了顯示窗口中所有的CEdit控件,先是獲取當(dāng)前窗口的子窗口,在判斷是否是CEdit類的實(shí)例,
ShowWindow,在得到子窗口的兄弟節(jié)點(diǎn),哎!MFC有時(shí)還是比較有意思的哦!

Richard Liu 2008-12-24 21:40 發(fā)表評(píng)論
]]>
開發(fā)航片處理工具的一點(diǎn)感受http://www.shnenglu.com/vliuchao/archive/2008/12/22/70111.htmlRichard LiuRichard LiuMon, 22 Dec 2008 15:13:00 GMThttp://www.shnenglu.com/vliuchao/archive/2008/12/22/70111.htmlhttp://www.shnenglu.com/vliuchao/comments/70111.htmlhttp://www.shnenglu.com/vliuchao/archive/2008/12/22/70111.html#Feedback0http://www.shnenglu.com/vliuchao/comments/commentRss/70111.htmlhttp://www.shnenglu.com/vliuchao/services/trackbacks/70111.html在這個(gè)過程中收獲還是不少的哦,痛并快樂著,不能不佩服老大的架構(gòu)的思想,在英明神武的老大的指導(dǎo)下開發(fā)出一個(gè)基本上比較符合面向?qū)ο蟮能浖渲械木幊趟枷氲臎_擊是巨大的哦,顛覆了我以前做程序的很多固有觀點(diǎn)。
首先來說說該工具的需求,對(duì)已有的大尺寸的航片進(jìn)行切割,切割出給定寬高的航片,在提層合并航片。具體來說就是如果有一張1024 * 1024的航片切割成8 * 8張 128*128大小的航片為第零層,提層比率為2,則第1層就是原航片的256*256大小的,但是要保存為128 *128的航片 這樣的航片有4 *4張,依次類推,第2層 第 3層...,還有這些航片的編號(hào)以LLXXXYYY編號(hào),坐標(biāo)原點(diǎn)為航片左下角,ll為層數(shù),XXX為X軸上航片編號(hào),YYY為Y軸上的航片的編號(hào)。
剛開始聽到這個(gè)需求的時(shí)候確實(shí)是沒有什么頭緒,研究了一下libtiff就開始搞了哦,剛開始的時(shí)候很快就把航片的讀寫搞定了,以為會(huì)很快就解決問題啦,悶著頭在那里狂寫代碼,第一版交給老大,被鄙視的不行哦,首先因?yàn)樾枨鬀]有理解清楚,自己理解的圖像編號(hào)和老大所說的圖像編號(hào)的順序不同哦,回過來改代碼發(fā)現(xiàn)居然無從下手,還有就是老大要生成航片處理的結(jié)果,也無法在代碼中體現(xiàn)。說實(shí)話當(dāng)時(shí)心里還是比較嘀咕的,覺得老大交代問題沒有交代清楚,后來老大說的一句話還是比較有道理的,客戶的需求是不斷變化的,你要是想讓用戶來適應(yīng)你的設(shè)計(jì)是不可能的,你的設(shè)計(jì)應(yīng)該是自適應(yīng)的,能夠應(yīng)對(duì)客戶不斷變化的需求。聽完這句話,只有無語(yǔ)接著在那里寫代碼,等我寫的七七八八了,老大有空看了一下我的代碼,繼續(xù)鄙視我哦,為何?模塊劃分不清,UI層中有太多航片處理的邏輯,航片處理模塊中也有太多的航片編號(hào)的邏輯。一句話 整個(gè)代碼只是為做實(shí)現(xiàn)這個(gè)功能,毫無擴(kuò)展性,如果以后在在上面添加功能基本上是沒有可能。
哎!老大當(dāng)時(shí)這樣說了,讓我修改代碼,當(dāng)時(shí)真是想死的心都有了哦,修改也不知道怎么下手,和老大探討了半天,終于是定下了架構(gòu),呵呵當(dāng)然啦,主要還是老大定的架構(gòu)。這次交流收獲還是不少的哦。
做軟件首先應(yīng)該定下的是輸入和輸出,確定數(shù)據(jù)的流向。從UI層定義輸入,確定盡可能少的輸入?yún)?shù),從輸出確定數(shù)據(jù),輸入?yún)?shù)到輸出之間確定數(shù)據(jù)的流向,對(duì)數(shù)據(jù)的流向進(jìn)行功能上的劃分,確定不同的模塊,模塊之間盡可能少的耦合性,如果一個(gè)數(shù)據(jù)和操作是相互關(guān)聯(lián)的則可以視為一個(gè)對(duì)象,對(duì)象的設(shè)計(jì)應(yīng)該考慮到擴(kuò)展性,盡可能的從一個(gè)基類派生,為以后擴(kuò)展提供基礎(chǔ),使用工廠模式來確定不同的對(duì)象。還有就是UI與底層數(shù)據(jù)處理模塊應(yīng)該沒有關(guān)聯(lián),通過一個(gè)處理模塊來出來UI和底層模塊之間的交換。
  哎,這樣做下來,我的工具有5個(gè)模塊,一個(gè)處理編號(hào)生成的模塊A,一個(gè)參數(shù)保存的模塊B,一個(gè)處理航片讀寫的模塊C,一個(gè)生成切割航片的模塊D,一個(gè)與UI交互和與底層交互的模塊E,它們之間的依賴關(guān)系為 E依賴于A D, A依賴于B, D依賴于C,這樣模塊間依賴清楚,接口也定義的明確。
收獲哦!有一種豁然開朗的感覺,以后有機(jī)會(huì)獨(dú)立開發(fā)的時(shí)候應(yīng)該多想想這樣的問題,爭(zhēng)取早日有所成就哦!


Richard Liu 2008-12-22 23:13 發(fā)表評(píng)論
]]>
VS2005開發(fā)DLL工程http://www.shnenglu.com/vliuchao/archive/2008/12/21/69962.htmlRichard LiuRichard LiuSat, 20 Dec 2008 16:40:00 GMThttp://www.shnenglu.com/vliuchao/archive/2008/12/21/69962.htmlhttp://www.shnenglu.com/vliuchao/comments/69962.htmlhttp://www.shnenglu.com/vliuchao/archive/2008/12/21/69962.html#Feedback3http://www.shnenglu.com/vliuchao/comments/commentRss/69962.htmlhttp://www.shnenglu.com/vliuchao/services/trackbacks/69962.html       首先要有一個(gè)解決方案,我想這個(gè)怎么搞就不用我在這里廢話了哦,生成一個(gè)項(xiàng)目作為界面,同時(shí)這個(gè)項(xiàng)目也是主項(xiàng)目。在該解決方案下面添加實(shí)現(xiàn)不同功能的各種項(xiàng)目,這些項(xiàng)目在向?qū)е羞x擇的時(shí)候選擇為win32 項(xiàng)目,在為win32項(xiàng)目的應(yīng)用程序設(shè)置中選擇DLL就可以建立一個(gè)DLL工程了,在DLL工程中添加自己寫的頭文件和CPP文件,這樣就建立了一個(gè)DLL不過現(xiàn)在還沒有導(dǎo)出DLL。
     要生成一個(gè)DLL還必須添加導(dǎo)出函數(shù)的宏, __declspec(dllexport)和__declspec(dllimport) 這里有一個(gè)小的技巧,就是利用工程的預(yù)編譯宏來設(shè)置如果有一個(gè)工程名為Test,在要導(dǎo)出的類前面加上如下的代碼
1#ifdef TEST_EXPORTS
2#define TEST_API  __declspec(dllexport)
3#else
4#define TEST_API __declspec(dllimport)
5#endif
如果要導(dǎo)出的類名為class exportA;則可以在頭文件中類的聲明可以這樣寫class TEST_API exportA結(jié)可以把整個(gè)類導(dǎo)出了,在主工程中引用導(dǎo)出類exportA 只要包含該頭文件就可以了,為什么會(huì)這樣這是因?yàn)槭褂昧松厦娴念A(yù)編譯頭的緣故哦,在DLL工程中存在TEST_EXPORTS宏,所以在DLL工程中是類導(dǎo)出,在其他引用該工程的工程中包含搞頭文件因?yàn)椴淮嬖赥EST_EXPORTS宏,所以是類導(dǎo)入,呵呵 比較巧妙吧,其實(shí)看看網(wǎng)上的很多開源的庫(kù)生成DLL的好像很多也使用了該方法,不過可能可能開源庫(kù)很少是用VS開發(fā)的,所以不知道他們具體是怎么搞的。但是確實(shí)看到很多的開源庫(kù)的配置文件性質(zhì)的投文件中使用了這個(gè)技巧的。
     上面說的還有一個(gè)問題就是在其他工程中包含DLL工程還存在問題,無法引用導(dǎo)出的類,應(yīng)該還有一個(gè)工作要做那就是應(yīng)該包含DLL工程生成的lib 和dll文件加上導(dǎo)出類的頭文件就可以直接使用DLL工程中的類了哦,不過如果是自己開發(fā)還是最好把DLL工程和要引用DLL的工程作為一個(gè)解決方案的啦,這樣方便調(diào)試的,這里有幾個(gè)問題要注意:
      1 項(xiàng)目依賴一定要設(shè)置好,至于怎么設(shè)置 那我就不說了哦,呵呵 在項(xiàng)目右鍵總是會(huì)的哦
      2 項(xiàng)目引用要設(shè)置哦,比如說工程A使用了exportA類,那就一定要設(shè)置引用,引用工程Test,怎么設(shè)置,在A的通用屬性中的引用中設(shè)置啦。
    ok這樣就可以開發(fā)出使用DLL的工程了哦,Release的時(shí)候含有一大堆的DLL給用戶搞得很專業(yè)的樣子哦,呵呵!PS:可能有人說導(dǎo)出類會(huì)暴露很多細(xì)節(jié)給用戶啦,呵呵這個(gè)其實(shí)也好解決的哦,看看OCI的封裝就會(huì)知道哦,使用私有類就可以隱藏所有的私有方法和屬性的哦,具體怎么搞?呵呵去看看exception C++上關(guān)于IMPL的啦 上面有很好的說明撒。

Richard Liu 2008-12-21 00:40 發(fā)表評(píng)論
]]>
C++中的流(1)http://www.shnenglu.com/vliuchao/archive/2008/12/12/69301.htmlRichard LiuRichard LiuFri, 12 Dec 2008 14:43:00 GMThttp://www.shnenglu.com/vliuchao/archive/2008/12/12/69301.htmlhttp://www.shnenglu.com/vliuchao/comments/69301.htmlhttp://www.shnenglu.com/vliuchao/archive/2008/12/12/69301.html#Feedback0http://www.shnenglu.com/vliuchao/comments/commentRss/69301.htmlhttp://www.shnenglu.com/vliuchao/services/trackbacks/69301.html流在C++中的地位是很重要的,流的概念隨C++程序設(shè)計(jì)語(yǔ)言問世以來就存在,ANSI C++C++流大概占三分之一的比重,從中可以看出流的重要。

在學(xué)校的時(shí)候接觸C++,其實(shí)學(xué)習(xí)的第一個(gè)hello world程序就使用了流

 
1#include <iostream>
2
3using namespace std;
4
5int main(int argc, char *argv[])
6{
7 cout<<"hello world"<<endl;
8}
 其中的cout就是標(biāo)準(zhǔn)IO流,往標(biāo)準(zhǔn)終端輸出,輸出類型為const char數(shù)組,但是也可以輸出數(shù)值,不論是int型還是浮點(diǎn)數(shù)都可以輸出,輸出到標(biāo)準(zhǔn)終端的都是字符型數(shù)組。
        對(duì)應(yīng)cout的有cin為從標(biāo)準(zhǔn)輸入設(shè)備得到輸入,簡(jiǎn)單的示例如下
 
 1#include <iostream>
 2
 3using namespace std;
 4
 5int main(int argc, char *argv[])
 6{
 7 int X;
 8 int Y;
 9 cin>>X>>Y;
10 cout << X+Y<<endl;
11}

上個(gè)示例中中從標(biāo)準(zhǔn)輸入設(shè)備,如鍵盤輸入數(shù)值可以賦值給int變量 X ,Y值,間隔輸入用回車來隔開。
      簡(jiǎn)單的說了一下C++的流,那具體來說說什么是流,流可以從輸入輸出方面來理解,就是用來傳遞數(shù)據(jù)的的一個(gè)無結(jié)構(gòu)的字節(jié)序列、字符序列、或者任意同等大小的單位的數(shù)據(jù)序列,就像一個(gè)流動(dòng)的管道來承載數(shù)據(jù),估計(jì)這就是為什么叫做流的緣故吧,俺猜的哦!

    標(biāo)準(zhǔn)C++支持流IO,也就是流形式的IO,對(duì)于流形式的IO實(shí)際形式的接口隱藏在IO流的接口中,對(duì)流IO的用戶來說與IO交互的就是字符流,呵呵記住哦,就是字符流,不是字節(jié)流也不是位流哦,這里字符流有兩種形式,一種char型的,一種的wchar_t型的。上面說到的cin和cout方法就是用來和流IO進(jìn)行交互的,當(dāng)然還有cerr和clog這個(gè)以后專門來講講哦。
       在實(shí)際的編程中還會(huì)用到另外一種形式的流——串,這個(gè)也是流的一種,具體怎么來定義串,俺也不知道哦,等什么時(shí)候找到經(jīng)典定義了在來說說哦。這里就講講幾個(gè)用串的經(jīng)典用法,編程的時(shí)候經(jīng)常用到的幾個(gè)方法。

 1#include <sstream>
 2template <class T>
 3std::string  ToString(const T& _value)
 4{             
 5std::ostringstream o;    
 6<< _value; 
 7return(o.str());
 8}

 9
10template <class T>
11T FromString(const std::string& _value)
12{            
13std::istringstream i(_value); 
14T t;
15>> t; 
16return(t);
17}

上面兩個(gè)函數(shù)可以實(shí)現(xiàn)在C++中的字符串轉(zhuǎn)數(shù)值和數(shù)值轉(zhuǎn)字符串,至于為什么能實(shí)現(xiàn)轉(zhuǎn)換,這就是因?yàn)榱鞯膶?shí)現(xiàn)形式一般都是分為四個(gè)步驟的:
1  格式化解析
2 緩沖
3 編碼轉(zhuǎn)換
4 傳遞
上面的兩個(gè)函數(shù)沒有涉及到編碼轉(zhuǎn)換的問題,這個(gè)由local類來實(shí)現(xiàn)的,會(huì)在后續(xù)的文章來接著分析啦,在這里在丟一個(gè)常用的數(shù)值轉(zhuǎn)字符串的常用方法來結(jié)束本文哦,
 1///對(duì)齊數(shù) _value是要轉(zhuǎn)換的數(shù)值,_alignLen是對(duì)齊
 2///的長(zhǎng)度,這個(gè)方法的應(yīng)用還是比較多的哦,像輸入10 1 
 3///100這類數(shù)值前面要用0補(bǔ)齊即010,001,100這樣的形
 4///式,用串來實(shí)現(xiàn)就不用用if判斷了>100,>10,>1的情況
 5///這還只是三位數(shù)的情況,要是十位數(shù)或者更多,我估計(jì)用
 6///if來判斷那還不是瘋了哦,還是用我這個(gè)函數(shù)好哦,只要
 7///一個(gè)參數(shù)什么都搞定

 8#include<sstream>
 9template<typename T>
10string GetAlignment(T _value, int _alignLen)
11{
12ostringstream returnNum;
13returnNum.width(_alignLen);
14returnNum.fill('0');
15returnNum<<_value;
16returnNum.width(0);
17return (returnNum.str());
18}

 今天就說到這里哦,下次對(duì)流進(jìn)行詳細(xì)的剖析哦!

Richard Liu 2008-12-12 22:43 發(fā)表評(píng)論
]]>
国产成人久久激情91| 91麻豆国产精品91久久久| 久久天堂电影网| 欧美午夜A∨大片久久 | 国产精品久久国产精品99盘 | 久久久久亚洲AV无码去区首| 伊人久久大香线蕉综合5g| 欧美日韩精品久久久免费观看| avtt天堂网久久精品| 日本高清无卡码一区二区久久| 少妇精品久久久一区二区三区| 色综合久久综精品| 人人狠狠综合久久亚洲高清| 99热成人精品热久久669| 亚洲午夜福利精品久久| 日本久久久精品中文字幕| 大香伊人久久精品一区二区 | 亚洲精品成人网久久久久久| a级成人毛片久久| 亚洲精品白浆高清久久久久久 | 久久综合中文字幕| 亚洲午夜久久久影院| 久久免费99精品国产自在现线 | 日本WV一本一道久久香蕉| 久久国产影院| 99精品伊人久久久大香线蕉 | 午夜视频久久久久一区| 99久久综合狠狠综合久久| 精品久久久久久成人AV| 77777亚洲午夜久久多人| 香港aa三级久久三级老师2021国产三级精品三级在 | 久久亚洲精品国产精品| 亚洲中文字幕无码久久2017| 欧美精品丝袜久久久中文字幕 | 国产精品综合久久第一页| 色婷婷综合久久久久中文一区二区| 久久精品亚洲欧美日韩久久| 久久99精品国产麻豆宅宅| 成人资源影音先锋久久资源网| 久久精品国产亚洲AV香蕉| 99久久er这里只有精品18|