• <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>

            記錄一些學習小事

            Work hard

            統(tǒng)計

            留言簿

            閱讀排行榜

            評論排行榜

            2011年9月11日 #

            大家天天寫程序累了,小弟貼個小文章過來,給大家點心靈上的感觸

            從搬進這家民房的第一天,我就開始懷疑我隔壁的那個儲藏室根本沒住人。一天到晚黑黢黢的,沒半點聲響。 
            我終于還是忍受不了房間里那個破沙發(fā)了,便又一次跟房東要求,能不能讓我把一些雜物放進隔壁的儲藏室。房東斜著眼,哼了一下:跟你說過多少次了?那儲藏室租給一對民工夫婦了,里面住著人呢! 
            我算見識了廣東人的摳門,就打算再也不去碰這一鼻子灰了。 
            那天,我出來倒垃圾,經(jīng)過儲藏室的門,聽到里面窸窸嗦嗦的,氣就不打一處來,我知道肯定是老鼠又在里面大**了。我狠狠地一腳踹在門上,還不解氣,就又猛踹一腳。 
            門吱嘎的開了,我嚇了一跳。我以為我把門踹壞了;正忐忑不安的時候,一個女人的腦袋伸了出來,確切的說應(yīng)該是個女孩或者少婦,從她那蓬松的馬尾辮和還有些稚氣的臉上我實在無法判斷她的年齡。 
            她輕輕的問道:您找誰? 
            我愣了,呆在那里,不知道說什么好。 
            這時候一個有些猥瑣的男孩子也把腦袋湊著伸了出來,遲疑了一下說:你是隔壁的吧?! 
            我一下子醒悟過來,說:是啊,是啊。 
            男孩子笑嘻嘻的得意的說:我上次下班回來見過你。 
            周圍的空氣戛然的停在那里,有些尷尬。我趕忙說著:不好意思,不好意思,打擾你們了。便迅速的溜回自己的房門。我聽到了他們輕輕關(guān)房門的聲音,還聽到了他們竊竊私語的聲音,好像在說:是不是我們平時動靜太大,吵到鄰居了?那以后我們要多注意了!之類的話。 
            我喝了口水,平靜下來,我才確信,那個一天到晚黑洞洞的儲藏室里真的住著倆人,這倆人也許就是房東說的那對民工夫婦。 
            我突然冷笑了一下,還夫婦呢,一看也就20來歲的樣子,私奔出來的?還是新婚小夫妻?不自覺的笑了笑,自我解嘲的想:民工么, 農(nóng)村出來的,結(jié)婚普遍早。那看來以后得稱呼,那男人,那女人了。這樣想著,還抑制不住的笑出了聲。 
            第一次跟這對小夫妻接觸是因為我忘記了帶鑰匙,進不了門,便找他們借工具,想把門撬開。 
            那是我第一次真正的去敲那個門,也是第一次去光顧那個陰暗的儲藏室。 
            門開了,他們夫妻看到我似乎很驚喜,趕忙的讓我進屋。我說明來意,他們夫妻就轉(zhuǎn)身找家伙去了。門開著,里面黑乎乎的,我忍不住往里邁了一步。不知道腳被什么絆了一下,我以為是有老鼠,嚇得“哎喲”大叫。他們中的一個,立馬打開了燈。天花板上的那盞小燈散發(fā)著昏黃的光,我敢肯定那燈泡不會超過10瓦。我很懷疑他們能從哪里買到這樣的燈泡,在這樣一個南方大都市我實在想象不出來哪里會有賣這樣的燈泡的。我猜想也許那是他們從老家?guī)淼囊舱f不定。 
            我打量著這個我曾經(jīng)很想把雜物放進來的儲藏室。我以最奢侈的估算,房間不會超過10個平方。四周沒有任何一個窗戶,門是唯一可以通風和出入的地方。房間里散發(fā)著一種潮濕的霉味,鉆進嗓子眼,讓人感覺惡心。我忍不住一個箭步退了出來。 
            可是我卻清楚的看到,房間里除了一張單人木板床和零落在地上的鍋碗瓢盤,真的沒有任何插腳的地方,我真佩服那對小夫妻是怎么呆在里面生活的。 
            最后,夫妻倆找到他們做飯的刀,也是唯一一個有可能打開我房門的工具,費了九牛二虎之力幫我弄開了門。 
            門開了,我并沒有任何要他們進來的意思。他們站在門口,把著門框。踮著腳尖,一副靦腆的樣子,打量著我這個兩室一廳的房子。女人終于說了一句話:怎么從來沒看見過您先生啊?我怔著臉說:我還沒結(jié)婚。女的臉紅了,似乎說錯了話,低著頭,不敢搭腔。男人不好意思地說;那您一個人住這么大的房子啊。我沒回答。 
            兩個人,半響沒說話。不知道是誰先看到了我放在客廳的電腦,便忍不住說:您有電腦呢! 
            我心里一個咯噔,民工也懂電腦?我說:是啊,你會上網(wǎng)么? 
            男的撓了撓頭皮說:我們讀大學的時候,有電腦課,上過機。 
            我嗖的渾身一陣發(fā)涼,大學?他們是大學生?可是怎么看怎么不像阿! 
            我心里多少有點被欺騙的感覺,就故意問:那你們現(xiàn)在做什么工作的?你們什么學校畢業(yè)的?讀的什么專業(yè)啊? 
            他們抿了抿嘴,有點不好意思,我以為這下可揭穿你們了,真虛偽! 
            突然男的開口了:我們讀的學校不好,也就是個三流大學,我跟我老婆是一個大學的又是同鄉(xiāng),她讀文科,我讀理科。現(xiàn)在我做業(yè)務(wù)員,她在餐館當服務(wù)員。 
            我撇了撇嘴,“哦”了一聲。 
            “我是**大學研究生畢業(yè)”在我說完這句話的時候,我才發(fā)現(xiàn),門口的兩個人不知道什么時候已經(jīng)走了。 
            我有點失落,猜測著他們有沒有聽到我提到**大學這個重點大學的名字 
            眾所周知,這幾年擴招,大學生可謂是遍地爬。大學容易讀了,可是就業(yè)卻難多了。三流大學的畢業(yè)生,真的是連民工都不如,要體力沒體力,要腦力又夠不上格。而且三流大學學費并不見得低,甚至要比好的大學要高很多,我就知道很多三流大學學費高的驚人。 
            看這對小夫妻,估計是農(nóng)村出來的,當初他們也許并不知道,花光家里的積蓄,得到的這一紙文憑,原來在這個社會里也許什么都不是。背負著一身債務(wù),出來打工才知道,原來三流大學的大學生只能跟小學沒畢業(yè)的靠體力吃飯的民工是一個層次的,都是命比紙薄,人比命賤的。 
            第二天,雖然我內(nèi)心深處還在揣測著,他們拿刀給我撬門技術(shù)這么好會不會哪天趁我不在也會這樣熟練的順手?可是總還是覺得別人幫了忙過意不去,就買了幾斤南方的水果給他們拎了過去。 
            他們似乎受寵若驚,說什么也不要。我就告訴他們這是廣州這邊的規(guī)矩,找人幫了忙,一定要表示的,不收就是不給我面子。他們才誠惶誠恐的收下了。 
            沒過一會,他們又來敲我的門。我以為是他們是把水果又送回來的,結(jié)果開門后的第一句話就說:請問,這水果最多能放多久?我詫異的望著他們,心里有點氣,心想:難道他們以為我給他們買的水果過期了?我正要發(fā)作,他們便補充一句:能放到過年回家么?我愣了,他們說:過年沒啥帶回去的,這水果一定不便宜吧?我們想過年回去的時候帶回去當年貨。我有點哭笑不得說:廣州天熱,不能放那么久的,個把星期就得壞了。 
            他們有點無奈,說了句謝謝,就走了。 
            可是我明明聽到:男的對女的說:要不我們想辦法留到8月15,過節(jié)的時候打打饞吧。 
            一個月后,農(nóng)歷的8月15,單位每人發(fā)了一盒高級月餅,拿回來后,我拆開嘗了一個,感覺很難吃,就想丟掉。 
            經(jīng)過那個儲藏室的門,我改變了主意,想著丟了也怪可惜的,他們那么可憐,倒不如給他們過節(jié)的好。 
            看著門虛掩著,我沒敲,就徑直推開了,那盞昏黃的燈亮著,兩個人蹲在地上,男的正在小心翼翼的切一個小小的月餅,正準備把一塊稍大點的給老婆吃,看到我站在門口,不知所措的說不出話來。女的正低頭啃著明顯已經(jīng)有點壞了的水果,吃的津津有味,我看到她沒有削皮,番石榴和火龍果都是帶著皮吃的。 
            男人呆了五秒,趕緊要把那塊稍微大點的月餅讓給我吃,我說我不吃月餅的,然后說明了來意。把那盒月餅放在門口就準備離去。女人叫住了我:大姐,我都不知道說什么好了,你看,我們吃的水果也是您給的,您又給我們送月餅來,我都不知道該怎么報答您了,本來今天老公公司給他發(fā)了一個月餅,我們商量著給您送去的,可是一個拿不出手,就沒好意思,我們也沒什么稀罕物,你有啥事要幫忙的,一定吱應(yīng)一聲啊! 
            我這才知道,那一個月餅是她老公發(fā)的,我也這才知道,她啃的水果是一個月前我送給他們的。我本來想說:吃火龍果要扒皮。可是我忍了忍,沒有說出來。 
            周末,隔壁的女人來敲門,問我有什么事是他們幫得上忙的,我笑著說沒有。她眼尖,看到我沙發(fā)上放著一大堆臟衣服,非要幫我洗,我說有洗衣機,一會丟進去就是了,不費事的。她尷尬的站在那里,像是很對不起的樣子,不知道該做什么好。 
            我第一次,很熱情的邀請她進門,坐一會。她脫了鞋,光著腳丫子,進了門。戰(zhàn)戰(zhàn)兢兢的,似乎怕弄臟了我的地板,不敢使勁踩下去。她哪里知道其實我已經(jīng)一個多星期沒有擦過地板了。 
            她告訴我,今天她休班,本來想幫我做點事的,可是沒想到?jīng)]做成。她似乎很羞愧,一直細聲細氣的答著我的話。她在我這里呆了半個小時,告訴了我他們的境遇,說那些話的時候她一直很溫柔,像在說一個故事,絲毫沒讓我感覺到她的埋怨和委屈。 
            我給她倒的那杯礦泉水,她一直攥在手里,臨走的時候,她望了望我,我點頭示意,她帶走了那個一次性的紙杯子和那杯礦泉水。我猜,她是想留給她的老公喝。 
            從今天我才知道,他們是這樣的: 
            兩個農(nóng)村出來的孩子,父母都是守著一畝三分地的地道農(nóng)民,每年家庭收入從來不會超過2000的貧困家庭,又都考上了同一所三流大學,學費每年的需要是父母不吃不喝的5 年的家庭收入。讀不起書,不想去,父母不肯,說這是唯一一次改變農(nóng)村孩子命運的機會,跪下來求你去讀。來讀了,沒錢交學費,好歹有個助學貸款,好不容易憑著優(yōu)異的成績申請到了,可是畢業(yè)的時候卻因為沒有還清貸款不發(fā)畢業(yè)證。四年的生活費是靠著獎學金艱難的撐下來的。到頭來,辛苦的付出卻換不到那一紙畢業(yè)證。于是兩人只能出來打工賺錢,攢夠了錢好回去贖回畢業(yè)證。 
            他們租著這個城市最廉價的房子,吃著這個城市最廉價的飯菜,過著這個城市最貧困的生活,可是一年到頭下來卻還攢不到1萬塊錢。這樣下去,要還完兩人的貸款還要8年。 
            我不知道8年對一個人的青春意味著什么,也不知道8年后是不是還能有機會有權(quán)利買回他們的畢業(yè)證。可是我知道8年的這樣的生活,不是隨便哪一個人能撐得住的! 
            那天,我回來的時候,有點晚,樓道里的燈已經(jīng)都開始亮著了,經(jīng)過隔壁門口的時候,看到他們門開著,屋里照樣還是黑黢黢的,男的蹲在門口大口大口的扒著面條,吃的很香。我問了一句:燈壞了?他先是遲疑了一下,然后憨憨的笑了:沒呢,省電,反正樓道里的燈亮著,開著門,屋里也挺亮堂的。我笑了。我這才知道,怪不得他們屋里天天都不開燈。 
            那晚他們的門一直敞開著到很晚。我在客廳里能隱隱約約的聽到他們的談話。 
            他們先是談了會,這個月又多花了多少錢,什么肥皂用的太快了,水太浪費了,上次過生日不該買那2斤肉的,以后洗菜的水可以洗臉,洗臉的水可以洗澡洗腳,洗腳的水可以洗襪子,洗襪子的水可以沖廁所等等之類的話。 
            他們一邊自責著自己花錢太多,一邊卻又忍不住憧憬著美好的未來。 
            他們想象著,不久的將來,也許還完了錢,就可以要個孩子,也許將來還能攢前買房子呢。 
            聽著他們興奮的呢喃聲,我久久沒有睡意。 
            半夜,我聽到男的喊肚子疼,好象疼的很厲害的樣子,“哎呀哎呀”的叫著。女的 很著急,問怎么了? 男的說好象今晚吃多了,撐著了。女的就招呼他趕緊起來上廁所。 
            男的遲疑了很久,似乎不想去,半響,我聽到男的說話了:我不想去上廁所,我們攢的沖廁所的水還不夠,那樣這個月的水又要超支了。再說了,上完廁所,拉空了肚子,晚上容易餓! 
            聽到這里,我腦袋轟的一下,空白了, 我的心被揪的生疼生疼,那句話成了我整夜的夢魘:拉空了肚子,我怕餓! 
            聽到那句話,我的心震撼了。我想到了我的爺爺。 
            爺爺生活在苦命的舊社會,在那個吃不飽,穿不暖的社會里,一年到頭,小孩子拼命的盼著過年,因為過年能吃頓飽飯! 
            所以,每個孩子在過年那天,吃的撐的小肚子圓溜溜的,肚子再怎么漲,都不舍得去廁所。因為,去了廁所,拉空了肚子,會容易感覺到餓,可是過完了年,是沒有機會再能吃頓飽飯的!所以每個孩子都憋著,忍著,因為那個年代,窮,人們怕餓, 孩子更怕餓! 
            可是在21世紀,在這么發(fā)達的年代,你竟然能從一個大學畢業(yè)生的嘴巴里聽到這樣的話,你會有怎樣的感覺?感動?悲慟?還是心酸?還是無可奈何的哀嘆? 
            或許都是,或許都不是! 
            我無暇顧及一個弱者的心態(tài),因為社會如此,我也無能為力。我唯一能表示的除了同情或許還是只有同情。 
            我也曾經(jīng)鄙視過,甚至曾經(jīng)在心底侮辱過: 活該,誰讓你沒本事考個名牌大學呢!沒錢讀個屁書,自作自受! 
            可是我也不得不承認,一個山里的孩子,是不能僅僅憑著聰明才智就能高攀的起名牌大學的門檻的;那需要能力,實力。實力有時候除了良好的教育,優(yōu)秀的老師,還有很多很多,比如金錢堆砌的補習班,比如只有城里孩子才能享受的到的全方位的教育,又比如有有權(quán)有勢的父母。 
            他們沒有,他們是農(nóng)村的孩子,他們沒資格和權(quán)利有,沒人給他們買各種輔導(dǎo)資料,也沒有全國的優(yōu)秀教師給他們手把手的教,他們沒見過鋼琴,沒見過電腦,他們甚至除了村支書,不認識任何一個可以稱得上干部的領(lǐng)導(dǎo)。 
            他們一天到晚只會看發(fā)的那唯一的課本,只會拼命的學,只知道只有考上大學才能改變自己的命運。 
            聽著他們蹩腳的英語,不太流利的普通話,有些邋遢的裝扮,破舊過時的衣著,我們都會忍不住笑。 
            我們喜歡在背后對他們評頭論足,喜歡抿著嘴吧裝作淑女般的嘲笑他們的無知,甚至喜歡在要去吃麥當勞的時候故意問他們?nèi)ゲ蝗ァA晳T了看他們的尷尬,習慣了看他們的無助,也習慣了他們失去的比得到多。 
            當我們有了太多的這樣的習慣,于是我們便開始不在乎,他們是不是餓,是不是在我們浪費糧食的時候,他們在心底里還默念著:不敢去廁所,怕拉空了肚子,餓!的事實。 
            “人怎能跟人相比呢?沒有可比性!農(nóng)村的怎么能跟城市的孩子比呢?沒比的必要!”這是以前我的一個朋友經(jīng)常跟我說的一句話,那時候聽了覺得好笑,現(xiàn)在想起來,覺得有點無可奈何的心酸。 
            人難道真分三六九等么?誰分的?你么?? 
            廣州的治安是越來越差了,住這種私房,真的是冒著生命危險的。可是眼下我又找不到合適的房子搬,只能暫且戰(zhàn)斗在最前線了。 
            整棟樓有十幾個房東,他們是天天圍著麻將桌懶得輪流值班的,反正偷的也不是他們家的東西。最后在我們幾個房客的據(jù)理力爭下,好歹請了一個保安。 
            我下班回來,看到樓下吵吵嚷嚷的,原來是保安抓住了個嫌疑犯。我好奇的瞥了一眼,這人不是別人,就是住在我隔壁的那個看上去有些猥瑣的男人。他低著頭,拼命的解釋:自己不是小偷,自己是住在這里的。 
            可是沒有人相信他,因為當保安問他住幾樓,哪個房間時,他只說了6樓,卻說不出房門號。因為儲藏室是沒門牌號碼的! 
            他像個嚇壞了的孩子,眼睛驚恐的掃視著周圍的每個人,聽著嘰里呱啦的客家話,他無力的解釋像一個人最后的死命掙扎。 
            我本能的走過去,他看到了我,眼睛里充滿了希望,含著淚珠的眸子閃過某種感激。我抬了抬我那總是直視遠方的眼睛,發(fā)現(xiàn)周圍的人都盯著我。 
            我遲疑了,立刻停住了自己那8公分的高跟鞋。我輕輕理了理自己的粉色洋裝,臉上滑過讓人不易察覺的一絲驚慌和害怕。我想扭頭沖向樓梯,當作什么都沒發(fā)生過。可是我怎么也抬不動我的雙腿,我僵持在哪里半秒鐘。 
            我盡量的壓低嗓門,很禮貌矜持的說:你怎么沒帶大門的鑰匙?是不是又丟了,真讓人煩! 
            保安放開了他,我微笑著說:他是我的遠房親戚。不好意思,給你添麻煩了。 
            我扭頭,踩著我那尖尖的高跟鞋上樓了,樓道里留下一串“嗒嗒”的響聲。 
            他老婆回來的時候,一直隔著門,站在我門口不停的說著:謝謝。我沒吱聲。過了不久,似乎她已經(jīng)走了的時候,我打開門,看到他們卻還站在門口,捧著一大把花生和紅棗。 
            我盯著他們,沒開門,他們也沒敢說這是給我。只是一個勁的解釋:下午那會,他老公是想在樓下?lián)鞄讉€礦泉水瓶子呢;要早知道不讓撿,他說啥也不去了。 
            我本想打斷她的講話,告訴他們:不是不讓撿,是你們長的不像住在這棟樓里的人。可是我還是忍住了,繼續(xù)聽他們說。 
            他們始終低著頭,輕聲慢語的,說:他們也知道這里的規(guī)矩,人家?guī)土嗣δ兀欢ㄒ兄x的,可是他們沒什么能拿的出手的東西,這是他們老鄉(xiāng)回家給他們捎來的家里的特產(chǎn),都是自家種的,沒用過化肥, 讓我放心吃。
            我還是開了門,拿了張紙,讓他們把那把禮物放在了一張潔白的A6紙上。 
            那把花生和棗我沒有吃,我就放在那里,看著。他們都光溜溜的,泛著光,很心想的樣子,一般大小的個頭。很飽滿。 
            房東終于找上門了,開門見山的第一句話就是:是不是你家新住進一個人?我愣了好大一會,才想起來,可能是保安跟他說了。 
            我把事情的來龍去脈解釋了一下,并試圖說服房東給隔壁的門也掛個號,房東不情愿的“嗯呢”了幾聲,便走了。 
            第二天,我真的看到他們的門上貼了張紙,寫著:清潔工具存放處。 
            沒過幾天,我大學里的死party兼室友和她新結(jié)識的男友來廣州找樂,我被迫請了一天假,陪他們。 
            隨便找了個館子想請他們吃粵菜,可是朋友說粵菜沒味,沒吃幾下,就嚷著走,后來還是不得不去了湘菜館子,才算滿足他們的胃口。吃完飯,沒事,街上是不敢拎著包包閑逛的,就去了“錢柜”K歌,唱到一半,結(jié)果又使性子,非要去“朝歌”。弄來弄去,歌沒唱好,還耽誤了時間。 
            晚上回來的時候,已經(jīng)有些晚了。可是我看到隔壁的燈還亮著,屋里還嚶嚶的傳來抽泣的聲音。 
            我沒理會那聲音,開了門,把朋友讓了進去。朋友進門就開了電腦,把那首《不怕不怕》開的聲音老大,震的整個房子都晃悠。 
            樓下的終于忍不住了。來敲門,讓我們動靜小點。我關(guān)了音樂,跟朋友談起了隔壁的那對小夫妻。朋友以為我在講故事,一邊說著無聊,一邊就摸過煙開始吸。我最討厭煙味,因為那能嗆出眼淚。 
            我趕朋友出門,讓她在樓道里吸夠了再回來。 
            半支煙工夫,朋友死命的敲門,興奮的叫著她男朋友的名字,說快出來聽戲。 
            他們倆出去,便沒了聲息。好久才回來。 
            朋友一進來,就湊到我耳朵邊說:你別假正經(jīng)了,是不是每天晚上沒事,就去隔壁聽音樂啊? 我還沒來得及反應(yīng)過來,他們倆就大笑起來。沒完沒了的,怪煩人的。 
            后來,我才知道,原來他們倆是去隔壁門口聽動靜去了。至于什么動靜,我沒問,但我想,應(yīng)該與顏色相關(guān)。 
            晚上睡不著拿起《洛麗塔》,看了兩頁,就開始走神。后來迷迷糊糊的睡著的時候,我似乎真的聽到了隔壁的動靜,聲音不大,但很誘人。 
            朋友呆了還不到3天,我就開始煩躁,我感覺那種以往的寧靜被打破了,而且一個單身女人看到一對情人在你面前晃來晃去的親昵,真的容易中風! 
            送走他們,我開始變得神經(jīng)質(zhì),我經(jīng)常故意關(guān)門很大聲,估計開開關(guān)關(guān)防盜門不停,故意想讓隔壁聽到我在發(fā)脾氣,故意想讓每個人都知道我心情很不好。 
            隔壁的小夫妻還是每次看見我笑笑的,有點靦腆的羞赧。男人那頭有點油膩有點亂的頭發(fā)依舊還是在發(fā)梢上泛著或多或少的頭皮屑,女人的馬尾辮也依舊蓬松的攏在后面,有點像秋天亂飛的樹葉。 
            可是我見了他們,卻沒有笑,也不再板著臉,只是面無表情的點個頭,用自己有力的鞋跟敲打著地面,匆匆離去。 
            每次低下頭,看著自己那8公分的高跟鞋,我才恍惚的感覺到,其實沒有了這鞋跟,我似乎也不高! 
            然后就是無休止的失落和郁悶! 我猜,他們一定是精心挑過了的。估計一麻袋里才能挑出這般的花生棗子吧。 
            想到這里,我笑了。不大會,我又后悔起來,我真不該笑!
            有這么幾天,那扇門一直關(guān)的緊緊的,屋里也一直沒亮過燈,我扒在門縫里瞅,竟然不能看到里面的任何東西。有幾次,我甚至使勁貼著耳朵聽,竟然也絲毫沒聽到任何動靜。我開始害怕,擔心他們不聲不響的搬走了。 
            我甚至開始抱怨,為什么走的時候沒打聲招呼。我不知所措,在房間里踱來踱去,狠命的撕扯著那個抱枕,用力敲打著鍵盤,寫著一些很尖刻的文字,用蔑視的眼光看著周遭的一切。 
            我發(fā)現(xiàn)我有好久沒這么情緒激動過了,甚至應(yīng)該說我有很多年沒這么情緒化了。我突然傷感起來。似乎失去了什么珍貴的東西,似乎別人偷走了原本屬于我的一份心情。我開始詛咒,開始謾罵,開始憎恨這個世界。 
            我每天站在門口,期望著能突然有人站在我面前笑,我總是忍不住去瞄那扇門,希望能看到里面透出一絲淡淡的泛著黃暈的光。可是一連好幾天,都沒有。 
            我終于還是跑去找了那個有點啰嗦的房東。我說我要租那個儲藏室。房東訝異的看著我:你要住?我皺了皺眉,說:我要放沙發(fā)。房東似乎有點為難:你想什么時候租?我詫異了:難道現(xiàn)在還有人住么? 不是空出來了么?房東說:那對民工下個月到期。 
            我忽然有種莫名的欣喜,難道還沒走?我結(jié)結(jié)巴巴的說著:那下個月我租! 
            等我再經(jīng)過那扇門的時候,我有點高興,因為我似乎看到里面鍋碗瓢盤碰撞的聲音,因為似乎我能聽到他們的竊竊私語。 
            那天,我睡的很早,我其實一點也不困。可是我還是早早的躺在了床上,我睜大了眼睛,看著天花板,想著有一次能有人敲我的門。 
            一陣開門的聲音驚動了我,盡管那聲音小的還沒蚊子“嗡嗡”聲大,可是近幾天我練就了一雙聰慧的耳朵。我唰的從床上爬起來,沖了出去。 
            那女人看著我當啷的一聲開門聲,嚇得站在哪里不動了。我很尷尬,趕忙掩飾自己的那種激動:回來了?怎么這幾天都不在?回老家了么?女人望了我半響,吞吞吐吐的說:還沒睡呢,大姐。沒,沒呢,沒回去。這幾天有事。 
            她第一次不是微笑著跟我說話,也是第一次沒有過多的說什么,就進了那間我天天盯緊了的儲藏室。 
            我愣在那里,好久,好久,我才反應(yīng)過來。我突然想哭,是那種有點委屈,有點付出了很多熱情卻被冷落后的難過。可是我沒哭出來,也沒掉淚,我只是關(guān)了門,打開了電腦,開始漫無目的到處游蕩。 
            那晚,我聽到她一個人忙到很晚,丁零當啷的不知道是做飯還是收拾東西。 
            聽到那個屋里一直傳來一個人的聲響,我突然很奇怪,那男人呢? 
            我孤單起來,感覺到寂寞的可怕,尤其是那隔壁的單調(diào)的動靜,讓我徹底的開始感覺到渾身冰涼。 
            我突然意識到:原來一個人是這么凄清,這么荒涼的可悲。我裹緊了睡衣,可是仍舊無法驅(qū)散這午夜的孤寂。 
            她似乎有點不好意思,在門口站了許久,沒有敲門,也沒有要走的意思,低著頭,好像在思索著怎么開口。 
            其實對于昨天那些簡單的話語,在南方這個有點冷漠的城市,不算什么,客套顯得奢侈,敷衍是每個人對周遭的理所當然的態(tài)度。可是我看得出來,她還并不適應(yīng)這種人與之之間的冷淡和乏味的陌路。也許,她以為,在這里還是跟家里一樣。可是,她單純的,怎么能想象的出來在異地他鄉(xiāng)很多時候人和人是沒人情味可言的。 
            我主動開了門,走了出去,看著她,等她第一個開口。 
            她聽到門響,忽的抬起頭,眼睛里有點驚慌,有點不好意思的欣喜。她笑了笑,我明顯的看到她的眼睛紅紅的,腫了,有哭過的痕跡。 
            她微微點了下頭:對不起大姐,平時你挺照顧我們的,昨天我心里難受,對你態(tài)度不大好,你別在意。我還有事,要趕著出門,沒別的事,我走了。 
            她轉(zhuǎn)過身,我一把拉住了她。我第一次像對一個朋友那樣的語氣問到:出啥事了? 
            她愣了,淚珠子像斷了線一樣,噼哩啪啦的掉下來,所有的委屈,壓抑,和內(nèi)心深處的痛苦,都隨著眼淚傾瀉下來。我毫無防備,她一下趴在我肩頭,哭出聲來。我沒拒絕,輕輕的環(huán)住了她,想著也許這樣能多少分擔一些她那莫大的苦楚。 
            她娓娓道來,我才知道,她老公住院了。 
            他老公本來做業(yè)務(wù)員,可是由于本性木訥,不善于交際,所以業(yè)績一直不好,只好辭職了,另找了份體力活暫時做著。由于體質(zhì)不好,又加上吃的不好,每天都很累,那天,去上班,不小心被掉下來的磚頭砸破了頭,住進了醫(yī)院。本來以為這算工傷,單位會報銷醫(yī)藥費,可是單位不僅不管,還把他開除了。積蓄都花光了,她只好回來收拾收拾,然后去把老公接回來養(yǎng)傷。 
            我拿出了張銀行卡,想給她取點錢,暫時用著,她死活不肯,就一溜煙的跑下了樓。 
            下午她和她老公就回來了,她老公的頭上包著紗布,有氣無力的樣子,看到我,還是擠出了笑容。看著他那矮矮瘦瘦的樣子,我似乎覺得他看上去沒那么猥瑣,盡管卑微,卻很精神;盡管怯懦,卻很堅強。我回了他一個微笑,這一次,我笑的很真,很用心。 
            那一天,一整天,我心情都很好。這是我從來到這座城市后第一次這么開心,第一次這么用心的笑,第一次這么在乎自己是否笑的認真。 
            那天,我看到了自己臉上掉下來的面具,赤裸裸的擺在我面前,露著森森白牙無力的呻吟,無力的掙扎,無力的哀嚎。 
            而我,就那么漫不經(jīng)心的,拿起打火機,點燃了它。 
            我小心翼翼的敲開了他們家的門,女的不在家,上班去了,男的顫巍巍的站在門口,望著我傻乎乎的笑著,不知道該怎么把我讓進門。 
            我并沒有要進去的意思,就那么直直的站在門口,像聊天一樣,像跟家人朋友說起話來:你們單位叫什么名字?憑什么在你上班期間受傷不按工傷負責醫(yī)藥費?他們有什么理由開除你?按照《勞動法》你有權(quán)利......我話還沒說完,他就傻傻的笑了,插嘴道:我知道,我也讀過大學,我也懂法,可是沒用的!《勞動法》也許真的能保障你們這些白領(lǐng)的合法權(quán)益,可是對于一個民工,是沒有任何保障可言的。拿什么保障?誰給你保障?你找誰討說法?什么這個機構(gòu),那個機構(gòu)都去過了,磨破了嘴皮子,根本沒人管!去單位,那些老板雇傭的打手不把你打殘廢算是幸運的了,再說,去挨頓揍,最后還是自己掏腰包看病,更不劃算。算了,我認了,誰讓咱沒啥社會地位呢! 
            聽著他的嘆氣,聽著他那些話語,我似乎感覺到了自己的幼稚,社會是殘酷的,生活是殘忍的。報紙上那些民工年年討要工錢反被打,干了活拖欠工資,受了工傷沒人管的新聞一幕幕浮現(xiàn)在我的眼前。我一下子開始清醒,社會就是這樣的,你讓這樣的一個弱者去那里討說法,你讓這樣的一個社會底層的人,拿什么來維護自己的權(quán)益? 
            我不再言語,我感到了語言的蒼白無力,我感到了詞匯的貧乏,我也感到了自己那些不太現(xiàn)實的想法的天真。 
            我有點虛弱的沉沉的嘆息,囈語般的說:外面的社會太無奈,這么艱難,還是回去吧,與其這樣備受凌辱和煎熬,不如回去過雖然貧困卻有尊嚴的日子。 
            他還是笑了,笑的有點無奈。他抬起頭,望著遠處,似乎在自言自語:回去?回去怎么辦?欠的學費無論如何要還的,都不還,國家怎么辦?國家在我最需要幫助的時候伸出了手,我不能忘恩負義,做人要厚道!何況家里還有弟弟妹妹在讀書,父母也年邁了,身體又不好,不賺錢,怎么供弟妹?怎么養(yǎng)爹娘? 
            做人要厚道!聽到這句話,我驚呆了,一個生活這么艱難的人,一個淪落到社會最底層的人,竟然還想著國家,竟然做人的原則比我們這些衣冠楚楚的人都高尚。我開始感覺到自己似乎變小了,有些卑微。 
            我睜大眼睛,看著他,有那種很敬畏的目光一直盯著他,耳朵里飄過的全是他那些幽幽道來的話: 
            農(nóng)村真的窮,很多人都說,窮還生那么多?其實,為什么要生了一個還要生一個?誰愿意那么窮還要養(yǎng)幾個孩子,生活壓力更大,可是沒辦法。被逼的啊!在農(nóng)村,人老了,沒勞動能力的,就等于開始要養(yǎng)個閑人,農(nóng)村的老人沒養(yǎng)老保險,沒任何社會福利,也沒任何生活保障。如果不多生孩子,老了后,一個孩子養(yǎng)不起倆人老,那還不得活活餓死,于是只好多生幾個,分輕負擔。養(yǎng)兒防老是農(nóng)村不得已的傳統(tǒng)! 
            每個農(nóng)村的父母都想自己孩子有出息,而想改變命運只有考大學一條出路,可是讀大學卻是很昂貴的,所以家里只要有一個考上大學的,全家都要遭殃,跟著砸鍋賣鐵的供著。可是現(xiàn)在大學生畢業(yè)工作很難找,尤其是讀的學校不好,專業(yè)又不好,更難找;沒拿到畢業(yè)證等于沒上大學,去任何單位人家都要看你學歷證書,沒有,只能當民工。 
            說到這兒,他很無奈的搖了搖頭,用力的憋著嘴巴,不再言語。 
            我也沒說話,我不知道該說什么好,因為這是一個從小生活在城市里的孩子無法想象的,于是我選擇沉默。也只能沉默。 
            中午,我叫了兩份快餐,我端了一份給他,他說什么也不要。我假裝生氣道:我打擾你一個上午,讓你沒好好休息,請你吃個快餐算是表示歉意!他推辭不掉,只好接過去了。 
            我知道一個快餐,太寒磣了,可是我知道,如果過于奢侈的東西,他又怎么肯接受? 
            晚上,女的很晚才回來,累的一身疲憊。我聽到男的說:我給你留了好吃的,你餓了吧,快吃吧。女人堅持說吃過了,非要男的吃,因為男的有傷在身,需要營養(yǎng)。聽著他們推來推去。我的眼眶濕潤了。 
            我知道,我又錯了,我太不了解他們彼此的愛了,他們的愛是雙份的啊!又怎么忍心一個人獨吞一份自己認為是好的東西,而讓另一個咽著口水眼睜睜看著呢? 
            那天,我終于知道:兩份愛的倍數(shù)很大,很大,很大。以至于我根本無法看到它的邊際,無從理解它的內(nèi)涵。 
            男人終于慢慢的好起來了,等他完全康復(fù)的時候,我托朋友給他找了份稍微輕松點的工作,雖然賺錢不多,可是畢竟比先前的要好些。他們夫妻倆帶著滿懷的感激不知道說了多少遍:謝謝。盡管我一再說這是舉手之勞,可是他們還是不停的說謝謝。弄的我都有些慚愧了。 
            一個月后,男人和女人興高采烈的跑來拽著我往外走,我還沒弄清怎么回事,他們就把我拖出了門外。直到樓下,我才搞明白,原來男人發(fā)工資了,非要請我吃飯。我呵呵的笑著,說:不用客氣了,都是出門在外,互相照應(yīng)是應(yīng)該的,吃飯就免了吧。可是他們固執(zhí)的拉住我,非請不可,說:不請,于情于理都說不過去。看著我也一副堅決不去的樣子,他們倆急了:你是不是怕我們帶的錢不夠,不看,我?guī)Я撕脦装倌亍Uf著就要去掏錢。看著他們憨厚可愛的樣子,我實在推辭不過,只好答應(yīng)了。 
            我一邊走著,一邊想著:怎么樣才能既讓他們請了我,了卻了他們的心愿,又能為他們省錢。我想起了廣州最便宜的飯館,拉面館。 
            于是我裝作沉思良久的樣子說:我知道有個地方的東西很好吃,我最喜歡吃了。不如我們?nèi)コ蕴m州拉面吧。他們倆先是一呆,接著就說:那怎么行呢?怎么能請你只吃碗面呢?說啥也要請你吃頓好的。 
            我故意很生氣的樣子:我就喜歡吃拉面,你們要是誠心請我,就請我吃拉面,要是吃別的,我可不高興了。
            他們倆看我生氣了,只好答應(yīng)著,說:一切都依著我。 
            到了面館,我點了一碗牛肉面,男的點了一碗素的,一碗牛肉的。等拉面端上來的時候,男人把最大的一碗帶牛肉的面推到我面前,把另一碗有牛肉的端給他老婆,他自己的那碗?yún)s是碗小的素的。 
            看著我疑惑的眼神,男的趕緊解釋到:我喜歡吃素的。以前的傷口還沒長好,吃葷的對傷口不好,素的好。 
            其實我知道,這根本不關(guān)傷口的事,我知道他是為了省錢,可是他不會虧待朋友,于是只能虧待自己。 
            看著他大口的吃著面,看著他老婆不停的把牛肉夾到他碗里,看著夫妻兩人你不停的你把肉夾給我,我把肉夾給你;我的嗓子哽在那里,難受的咽不下去一口面。我能感覺到我的眼前一片模糊,不知道是面的熱氣撲在了臉上,還是有別的東西糊住了眼睛,能感受的只有一陣潮濕。 
            第一次,我學著他們的樣子,吃光了碗里的面,喝光了碗里的湯,盡管我撐的胃疼。可是我第一次能感覺到我內(nèi)心深處很充實,很滿足。 
            雖然吃的是8塊錢一碗的拉面,但是我知道這一餐很貴。那不僅僅是花去了他們好幾天的生活費;讓我得到的更不僅僅是飽飽的胃,而是我從未有過的感激和體會。這無論是多少錢都不能買得到的,也不是所有人都能得到的恩惠;那種價值只有人性中才有。 
            我想,這是我至今為止吃過的最貴的一頓飯,它真的很奢侈,很昂貴。 
            一個懶洋洋的午后,我的那個朋友給我打電話來,當我聽完他的敘述,我嚇呆了,我不知道他說的是不是真的,也沒聽清楚事情到底怎么回事,我只知道,我隔壁的那個男的被抓進了公共安全專家局。 
            朋友不停的埋怨我,怎么會給這樣的人介紹工作,言語間的不滿,無疑是說,我讓他幫忙找了這個工作,事情現(xiàn)在弄成這樣,他在那個公司老板面前已經(jīng)顏面盡失。聽著他憤憤的掛斷電話,我就知道,以后這個朋友算是沒了,更別說再找他幫忙給那對夫妻介紹工作了。 
            我已經(jīng)來不及關(guān)心,這份或許叫友誼的東西還是否能完整的存在,也無心去跟這位朋友道歉,我只想知道他怎么樣?我只想弄清楚事情到底是怎么回事。我在潛意識里竟然多了份對他的信任,我告訴自己,也許這是個誤會。 
            我請了假,急忙的趕回家,跑上樓,去敲那扇門,可是良久,都沒人來開門。我有點失落,我想也許女的已經(jīng)趕去公共安全專家局了。 
            我無力的靠在那里,望著隔壁我的門,突然傷感起來。我看到了我門框上貼著一張紙條,我跑過去,撕下來,是女的給我留的言。上面沒說什么事,只是留下了一個***的地址。我來不及多想,便趕去了那個***。 
            趕到那里的時候,我看到兩個**正在對女的訓(xùn)話,女的低著頭,忍住抽泣,聳動的肩膀似乎在極度的壓抑著將要哭出來的聲音。旁邊還坐著一個中年婦女。那個中年婦女頻頻的皺著眉頭,盡量的讓身子往一邊靠,唯恐女人那身有點破舊的衣服玷染她。我沖過去,拉住女的胳膊問道:到底出了什么事? 
            兩個**先是打量了我一番,沉吟了半響,然后口氣緩和的問道:你是?我沒看他們一眼,自顧的說:我是**晚報的記者,她是我的朋友,我想來找她了解一下情況。 
            兩個**互相看了一眼,半信半疑,但是又似乎不敢冒險,于是姿態(tài)便低了下來,不再大聲的吼著對女人訓(xùn)話,對我也客氣的套起交情來。 
            我把女人拉到一邊,問她到底是怎么回事,她老公在哪里?女人看著我,還沒開口,眼淚就刷的掉了下來,我安慰她不要哭,先把事情跟我說清楚,我們再想辦法。 
            原來事情是這樣的,今天上午,他老公去為公司的一個客戶送資料,在公共汽車站等車的時候,正巧遇到“飛車party”搶劫正在等車的一個婦女的包。婦女拼命拉住自己的包哭喊,卻沒有一個人去管,正在雙方你爭我奪,僵持不下的時候,他看到了,想都沒想,就沖過去,幫婦女奪包。無論賊人怎么打他,甚至拿出了刀子,可是他還是拉住包不放手,這時候執(zhí)勤**趕來,“飛車party”便逃竄了。 
            本來事情就這么簡單,可是當**趕來的時候,看著他也在奪包,以為他是搶劫犯的同伙,就問那個被搶的婦女,認不認識這個男的,婦女一口咬定不認識,并且還強調(diào):她也不知道這個男的是“飛車party”同伙,還是另一伙搶劫犯,反正跑上來就奪她的包。**二話不說,就帶走了男人。 
            由于男人著急給客戶送資料,所以再怎么解釋都沒用,挨了匪徒的打也就罷了,竟然還被**猛揍一頓,讓他老實交待。他怕耽誤公司交待的任務(wù),只好報出了公司的名字,本想著這樣只是可以趕緊讓公司派人來把資料及時轉(zhuǎn)交給客戶,沒想到,公司一聽,立馬不承認他是本單位的人,也就是說他立馬就被開除了。 
            **通知了他的老婆,他老婆一來,就被定性為:搶劫犯家屬。不停的被訓(xùn)話,還讓她交待問題。她嚇得不知道說什么,腦袋一片空白,要是我不來,她真的不知道該怎么辦? 
            聽完她的敘述,我一股無名火就上來了。我轉(zhuǎn)身到那位婦女旁邊:請問,你就是受害人?我想采訪一下您,這是我的工作證件。婦女愣了,不知所措的看著我,我不理會她的莫名其妙,繼續(xù)問道:請你詳細描述一下當時的情況,你為什么就認定這個幫你奪包的人也是搶劫犯,為什么你就不能認為他是來幫你從匪徒手上奪回包的人呢?
            婦女,看了看我,又看了看**,慢吞吞的,結(jié)結(jié)巴巴的說:怎么可能有那么好的人?這年頭,誰還愛管閑事啊?難道他不怕死?他要是真幫我,那他不是傻子就是精神有問題。pol.ice聽著,也頻頻點頭,似乎她說的才是一個正常的人所應(yīng)該做的。 
            看著他們理所當然然的表情,我憤怒了,我大吼起來:他如果是搶劫犯的同伙,為什么搶劫犯打他?他如果也想搶你東西,為什么pol.ice來了不跑?在pol.ice來之前那會,他完全可以搶了你東西就跑?你東西少了么?他打你了么?有目擊證人可以證明他也是在搶你包么?你們pol.ice有什么證據(jù)證明他就是搶劫犯?是因為他沒有這個城市的戶口?還是因為他穿著不夠華麗?一個冒著生命危險幫你忙的人,你竟然還要指責他是搶劫犯?如果是你被冤枉,你會怎么樣? 
            我深深吸了口氣:你們在沒證據(jù)的情況下,就抓人,就非法拘留,你們這是犯法!我指著那個婦女:你這樣不識好歹,分不清好人壞人,你不覺得慚愧么? 難道你也要教育你的孩子,事不關(guān)己?高高掛起? 
            所有的人都愣在那里,不說話,我知道,在這樣一個治安混亂,世風日下,人心不古的城市,在這樣一個,人與人之間冷漠的不帶丁點溫度的社會,在這樣一種你被欺負,我無視的風氣下,沒有人開始相信善良,也沒有人會去相信會有人無私去幫助別人,甚至當你去好心的做一件你認為對得起良心的事情的時候,在多數(shù)人眼里,那成了你偽善的最好外衣。 
            pol.ice可以抓錯你,法律可以錯判你,可是你要想去糾正這個錯誤卻不是一件簡單的事情。 
            抓錯你,可以只是因為懷疑你,就能給你戴個嫌疑犯的帽子;疑罪從無在很多時候只是法律條文里的一句話而已,現(xiàn)實中能真正貫徹實施的屈指可數(shù)。判錯你,可以有一萬個理由歸咎于司法的不健全,可是沒有人會為你受到的不公待遇負責,提起國家賠償,也只是說說而已,又有哪個人能真的得到過這樣的道歉形式?! 
            我知道,要給他洗清罪名,我必須全力以赴,我必須有足夠的證據(jù)證明他是無辜的,他是好人,他當時是想去幫助那個婦女。 
            盡管,現(xiàn)在婦女含糊其辭,已把自己搞糊涂了,自己也說不清楚他到底是不是來幫自己的等等理由來推脫,不想面對自己遇到好人,反咬一口的事實。pol.ice也以雖然沒有證據(jù)證明他是搶劫犯,但是事關(guān)他出現(xiàn)在事發(fā)現(xiàn)場,并與此事有關(guān)聯(lián)為由,不能徹徹底底的還他一個清白。 
            我知道,要靠抓住當時的那兩個搶劫犯來為他洗脫不白之冤可能性微乎其微,我只能想辦法找其他證據(jù)。我利用自己是記者的身份,想盡辦法,找到了當時事發(fā)現(xiàn)場的2個目擊證人,是一個報亭的老頭和一個推著車買水果的婦女。他們都說當時那男的的確是去幫被搶的婦女奪包,不是搶劫犯。可是當我想要他們陪我去趟***跟pol.ice證明一下的時候,他們卻死活都不肯。說不想多管閑事,怕惹一身臊。在我苦苦哀求無果的情況下,我不得不耍了點小手段,與其說是手段,不如說是無奈之舉。 
            我說我是記者,現(xiàn)在要對那天發(fā)生的事件,寫篇評論。廣州街頭一婦女被搶,好心人施救,反被誣賴是歹徒,旁觀者無人肯出頭!我還故意說:你們倆我也會以匿名形式將你們事不關(guān)己的態(tài)度寫進去的,不知道你們的孩子看了,會有何感想。 
            看著兩人有點遲疑,我又說,如果你們肯證明,我當然也會在文章中把你們伸張正義,深明大義的善良舉動報道出來的。我相信你們都是好人,都不會眼睜睜的看著另一個好人被誣賴受不白之苦的。 
            他們掂量了很久,終于還是被我說動了。 
            我又去找了男人公司的上司,盡管他很不情愿的開證明說那天的確是派男人去給客戶送資料的事實,但是礙于我與他們老板朋友有交情的情面,還是開了。盡管,我也知道,那個原來的朋友其實也許已經(jīng)沒得朋友可作了。 
            我找了律師,咨詢了這方面的法律,托了很多朋友和同學,終于把男人弄出來了。 
            盡管出來的時候,pol.ice沒一句道歉的話,盡管那個受過他幫助的婦女沒一個謝字。可是,我看得出來,他并沒斤斤計較的去在乎。起碼證明了他無罪,證明了他是個好人。 
            當這件事發(fā)生的時候,我失去了原本可以稱之為好友的朋友;甚至失去了以后可能再聯(lián)系的可能。但是我得到的更多,更多,我得到了讓一個好人恢復(fù)聲譽的機會,我得到了去幫助一個值得去幫助的人幸運,我也得到了一份我對自己的由衷的感激。 
            我不知道,他以后再碰到這樣的事還會不會毫無顧慮的沖上去幫忙,也不知道他內(nèi)心是不是已經(jīng)開始對于做一個好人的概念有了新的詮釋,可是我知道他本質(zhì)的善良不會因此而動搖。 
            可是無論怎樣,也不管以后他會不會繼續(xù)這樣做,我們都沒資格再去怪他,也沒權(quán)利去讓一個受過傷害的好人忍著痛再去迎頭頂?shù)蹲樱∫驗椋莻€拿刀子傷害他的人,其實就是我們,我們這些人,我們這個社會。 
            天空飄著雨,有點陰霾,來來往往的人潮,冷著一張張沒表情的臉,繼續(xù)在這個城市生活著,沒有人知道曾經(jīng)發(fā)生過這樣的一件事,甚至當初親眼見過此事的人也許早已當作一個談資將其遺落在腦后。 
            世界忘記了,可是我記得,那天記得,歲月記得。
            自此以后,那夫妻總是顯得有點卑微,總是在感激了我之后,有點抬不起頭來的難過。似乎全都是他們的錯,似乎他給我們,給所有的人添了很大的麻煩一樣。也許,真正善良的人都是這種心態(tài),總是不停的從自身找原因,總是覺得如果我夠好,又怎么會這樣,卻從來不去怪罪別人,不去把責任推卸到別人身上。 
            我試圖給男人再找份好點的工作,無奈,夫妻兩人總是笑瞇瞇的說:不麻煩了,他們找到工作,已經(jīng)在上班了。其實我心里明白,他們知道上次給我添了亂,是無論如何彌補不了的,盡管我不在乎,可是他們在乎,他們不想再來讓我為難,所以便拼命拒絕我的好意。 
            男人早出晚歸,我想或許是真的找到工作了。看著他們每天筋疲力盡的樣子,我心里酸酸的,卻又不知道該如何幫他們。我第一次感覺到:那種無可奈何的難過,竟然是能折磨人的。 
            元旦的時候,我在樓道遇到他們,夫妻二人高興的跟我打招呼,說要出去吃大餐。看著他們有說有笑的出門,我心里不禁艷羨起來,也許在我們?yōu)樗麄冸y過的時候,他們卻能找到屬于他們自己的生活的點滴快樂和幸福。 
            第二天,我一看到他們,就開始調(diào)侃:昨天去哪里吃的大餐?他們并沒有不好意思,而是神秘的笑了,那笑有點天真,又有點溫暖。女的趴早我耳朵邊悄悄的說:大姐,你知道么?有種店,是一塊錢吃到飽的!我驚詫了,睜大眼睛看著他們。 
            在廣州呆過的人都知道,有很多快餐店,為了吸引顧客,總喜歡在門口張貼著一塊錢吃到飽的大條幅,可是我們每個去過的人都知道,那只是一種標語,真的進去消費了,是永遠不可能會讓你花一塊錢吃頓飯的。說句實話,進去吃飯就算你一個人,吃下來,再怎么節(jié)省也要20塊錢。何況是夫妻倆人一塊去吃呢? 
            我很懷疑的看著他們,他們似乎有點不好意思了,男人終于忍不住了說:真的,大姐;我們沒騙你,我們昨天去吃過了,我們兩口子一共就花了五塊錢!我失笑出聲:怎么可能,米飯一個人都要算兩塊錢呢,五塊錢,你們吃的啥? 
            女人嘿嘿的笑了:我們進去,看菜單,發(fā)現(xiàn)只有一種小菜是一塊錢,就是花生米,這么小一碟。一邊說著,她便用手比劃著,其實她不比劃我也知道那碟花生,估計一共不會超過10粒花生米。因為在餐館里,這種一塊錢一碟的花生米,只是為了響應(yīng)他們的一塊錢吃到飽的口號的。現(xiàn)實中真正去點這個菜的人屈指可數(shù)。 
            女人還在眉飛色舞的說著:他們的例湯是免費的,一大盆呢! 反正米飯按人頭算錢,一個收兩塊,我們倆就著花生米一人吃了四碗米飯,喝光了所有的湯,吃的飽飽的,只花了五塊錢呢。 
            說完,他們倆相視一笑,反而讓我覺得不好意思起來。我不知道,他們是懷著多大的勇氣,走進一個還不錯的餐館,坐下來,只點一碟花生米,卻能吃完四碗飯的?我也不知道,他們在喝光免費的湯時, 一粒花生米就著一碗飯怎么就吃的那么滿足,那么開心。 
            我想,當時,肯定有很多人用異樣的眼光看著他們,甚至還會有人竊竊私語的笑話他們老土;也許他們甚至能夠聽到別人侮辱的話語,也能看到別人鄙視的眼光,但是他們卻還能繼續(xù)坐在那里,吃完那頓飯,并且是高高興興的吃完,然后拿五塊錢去買單。 
            我并不覺得這樣做有多么可恥,也并不覺得這樣做會有什么不妥,拿五塊錢來消費也是顧客,消費五塊錢并不就比消費了50塊的客人低一等。但是,無論什么時候,我們卻往往看到在某些消費場合,似乎高消費更能得到好的周到的服務(wù),又似乎有錢的更能得到尊重。 
            我承認,如果是我,懷里揣著五塊錢,是絕對不敢去這樣的餐廳消費的,我沒有勇氣去只叫一碟一塊錢的花生米,也許盡管我的食量只是一碗米飯加一碟花生米,但是我還是會要幾個也許我根本不會動一筷子的奢侈的菜。其實內(nèi)心也知道那是浪費,但是又有哪個人不喜歡用錢的浪費來購買自己面子的實惠呢? 
            在這個社會,有錢的比沒錢的說話更有底氣,富有的比貧窮的更能得到別人的尊重,高高在上大都是有錢人,社會底層的都是貧困潦倒的。畢竟現(xiàn)在是商品市場的社會,經(jīng)濟類型決定了錢是多么重要,錢變成了自尊,面子的代名詞。我們每天都活在賺錢買面子的日子里。在我們奢侈的去花大筆錢買所謂的面子的時候,我們是否會想起有那么一群人,還掙扎在溫飽線上呢? 
            月薪不如別人高感覺沒面子,到現(xiàn)在還沒有百來平方的房子感覺沒面子,工作了幾年還是普通職員也覺得沒面子,看到別人的老婆比自己的漂亮也會覺得顏面盡失,甚至會因為別人的衣服比自己的名牌也會汗顏。我們活在一個面子至上的世界,那點卑微的自尊心總是遮掩著自己脆弱的顏面。回首已逝去的歲月,才發(fā)現(xiàn)其實活的并不快樂,是因為賺的錢太少了,買不起足夠的面子?還是賺的錢買來的面子,遮住了自己的人性尊嚴? 
            金錢,生存,面子,自尊;在人生的天平上,到底孰重孰輕?! 
            年前,我懶洋洋的等待著春節(jié)的到來,想著是否該回家陪父母過年。在我猶豫了又猶豫的時候,我發(fā)現(xiàn)離過年還不到10天了,我想公司是非要靠到年前才肯放假的,想著又要買全價的飛機票,便在心里開始狠狠的想:明年一定不再磨蹭,提前倆月買票,估計就能買4折的飛機票回去了。 
            就在我敷衍著年前最后幾天的班,想著如何找個借口提前請假回家的那幾天,我一直沒看到隔壁的小夫妻。我以為他們早就回家過年去了。 
            可是就在一天半夜,女的敲開了我的門。我睜開惺忪的眼睛,含糊的問著:有事么?女的顯得很不好意思,說:對不起,打擾你了,我想讓您幫個忙,聽說民工能網(wǎng)上訂票,你能不能幫忙看看?我答應(yīng)著,讓她進了門,我打開電腦,開始幫忙給她訂火車票。可惜的是,網(wǎng)上訂票是要民工單位團體訂票,她和她老公的單位都沒有人給他們訂票,他們個人又沒資格網(wǎng)上訂。她看了看規(guī)定,很郁悶的走了。我迷迷糊糊的竟然忘記說句安慰她的話。 
            第二天,我心里一直記得這件事,總覺得該做點什么。我從新聞上看到可電話訂票,便匆匆記下了號碼,準備給他們個驚喜。 
            下班時間還沒到,我就急忙趕回去了,我回去的時候,女人在家,我好奇她為何沒去上班,但是我只顧著說電話訂票的事,就沒來得及問。男人不在家,我絮絮叨叨的跟女人說著電話號碼,我還掏出自己的手機讓她趕緊打電話訂票。 
            女人苦笑了一下,沒接我的手機。眼里含著淚,哽咽著對我說:我就是因為打電話訂票,被老板看到開除了。說著便苦起來:我這個月半個月的工資也沒給,說我是違反規(guī)定了,不罰錢就算是寬大處理了。 
            原來,女人也聽人說,可以電話訂票,從一大早起來就去IC電話亭打電話,可是總打不進去,就在中午吃飯時間,偷偷溜出去打電話訂票,可是打通了就說票已售完。一連一個星期都是如此,女人實在沒辦法,只好在早上店里沒客人的時候,用店門口那個公用電話繼續(xù)打電話,8點半就打通了,女人高興的不得了,以為這次終于可以訂到票了,結(jié)果卻說票已售完。票沒訂到不說,打電話卻被老板正巧看到了,說她上班時間做私事,就把她炒了。無論女人怎么苦苦哀求,還是慘遭開除。 
            我一邊安慰女人:反正要過年了,也要趕著回家過年呢,不干了也好,明年回來找個更好的工作。一邊說:要不再用我手機打打試試,說不定能訂到票呢。 
            女人搖著頭:不可能的,我老鄉(xiāng)電話打了十幾天了,也沒訂到,就算早上八點一開通服務(wù),你第一個打進去,也訂不到票,因為這個列次的火車過年很緊張,不可能正當途徑買到票。 
            我以前只知道過年買火車票難,可是沒想到這么難。我就問:去火車站排隊買不行么? 不是聽說那里很多票販子么?實在買不到就買黃牛票吧。 
            女人沉思半響,說:我老公已經(jīng)在火車站排隊排了半個月了,還沒買到票呢。他白天請假去排隊買不到,晚上就通宵不睡覺在那里排隊買,還是買不到。票販子天天看到我老公,主動找我老公說了好幾次,說他們有票,保證真的,可是手續(xù)費太貴了,我們不舍得阿! 
            我說:多少手續(xù)費?總不能比火車票價還貴吧!女人咧嘴笑了,那笑有點勉強:我們回去,坐硬座,票價才200多,可是手續(xù)費卻要300,你說兩張票連票錢加手續(xù)費就要1000多,我們一個月的錢啊。這不是喝我們血么?1000塊錢,在我們老家,是一年的收入啊,我們怎么能舍得呢! 
            聽著她的話,我無語了。我突然感到很自卑,感覺自己竟然是那么淺薄,那么無知。 
            為了兩張回家的火車票,工作丟了,倆人日日夜夜去排隊買票,拿著生活費去打那個比長途還貴的電話,半個月下來,得到的結(jié)果竟然是:票已售完。 
            那么多火車票去哪里了? 為什么天天排隊買票都說沒票了,票販子卻又喊著:去任何地方都有票,手續(xù)費300元呢? 
            到底,票都到了何人的手中? 又是怎樣到了這些人的手中的呢?而那天價手續(xù)費的暴利到底在養(yǎng)活著誰? 
            我氣沖沖的撥通了火車站的服務(wù)電話,我剛說完車次,就被告知:春節(jié)前本次車票已全部售完,請轉(zhuǎn)乘其他車次。 
            我有些失望,試圖勸說他們能不能轉(zhuǎn)車回去?或者坐長途汽車?女人慘淡的笑了笑:大姐你別操心了,沒法轉(zhuǎn)車,能經(jīng)過我們那個小地方的,就這一個車次,到別的地方倒車,也不好買票,還是回不去,汽車太貴了,都快趕上飛機票價了,不如走回去呢。說著還半安慰我似的開著這個黑色的玩笑。 
            看著她緊鎖的眉頭,想著也許這會她老公還在火車站滿懷著那么點希望排著隊,等著老天爺大發(fā)慈悲,給他們兩張回家的票,而我卻還在猶豫著過年回不回去陪父母,想著回趟家真累,來回路上夠折騰人的。
            我開始覺得自己的卑鄙,甚至渺小。他們也許可以不回去,但是卻非要堅持回去,是為了雙方年邁蒼老的父母?還是為了回去分擔家里的憂愁?無論怎樣,為了回去,卻要付出這般代價,值得么?也許很多人不以為然,可是在親情的天平上,這個砝碼卻很重。 
            一張過年回家的火車票,就那么一張薄薄的紙片,不知道要費多少心,傷多少神,排多少個夜晚的隊,付出多大的代價才能得到!那里面到底藏著多少回家人的血汗,又寫著多少回家人無奈的眼淚?! 
            我的飛機票已經(jīng)訂好了,全價! 
            每到過年,航空公司都開始腰桿子硬起來,打死不打折,可是飛機票卻依然緊俏,中國人都太戀家,過年花在回家路上的路費,也算是對拉動經(jīng)濟增長做點貢獻了。
            “鐵老大”,仍然牛氣烘烘的一邊說著加開臨時列車,又一邊抱歉的告訴你:票已售完。 
            隔比夫妻在輪班排隊買票的情況下,還是沒得到回家的那一張通行證。
            他們天天在火車站等著,
            盼著哪天能有個好心人來退票,可是這種奢望很渺茫,他們似乎也感覺到無力回天,除了等待奇跡,只能盤算著是不是真的要走回家。 
            在此期間,我一直不停的在網(wǎng)絡(luò)上搜索著關(guān)于這輛車次的消息。每次看到有人轉(zhuǎn)讓,我都急不可待的去聯(lián)系,可是都是票販子在打廣告,手續(xù)費比票價都高,而且行情看漲,越來越高。 
            我想幫他們出手續(xù)費,只要他們出票價,可是他們死活不答應(yīng),說是原則問題,就是走回去也不買高價票。他們很正式的跟我說:我們是中國公民,為什么坐車要買高價票呢?我們又不比別人低一等!難道我們沒權(quán)利去享受一張正當價錢的票么?都去買高價票,以后就真的只有高價票,沒有正當?shù)幕疖嚻绷耍切┍├B(yǎng)活的都不是好人,我們越這樣養(yǎng)他們,他們越貪婪。 
            聽了他們的話,我沉默了。 
            我突然害怕起這個有點病態(tài)的社會來,我怕那致命的細菌會感染我! 
            我感到那么無能為力的難過,我很想為他們做點什么,可是我卻到頭來什么都沒能為他們做,甚至只是兩張火車票,我都不能幫他們。 
            我最終沒逃脫,找關(guān)系,走后門的那些俗套。我托了朋友,朋友又托了朋友的一個在火車站工作的朋友,費了九牛二虎之力才弄到兩張硬座票。吃飯,應(yīng)酬,說著冠冕堂皇的感謝的話,最后,終于在每張票多付了100元的情況下我才有機會把票握在手里。 
            酒足飯飽后,那人打著酒嗝還在繼續(xù)不停的說著:票是多么難買,別人多出300塊手續(xù)費他都沒給,因為看在老朋友面子上他就當免費幫朋友的忙。 
            我只好用感激的眼神望著他,說著千恩萬謝的話,用一種謝謝你的大恩大德的態(tài)度來應(yīng)承他的恩惠。他滿足的笑著,我也在心里滿意的想著:有了票,他們終于可以回家過年了。 
            當我把兩張車票放在他們面前的時候,他們呆住了,用一種難以置信的崇敬的眼神望著我,良久都不說話。我笑著,什么話也沒說。 
            女人突然問道:你是不是買來的高價票?我搖搖頭?那票是哪里來的?我笑了。我沒說實話,我不知道為什么,在他們面前有些虛偽的實話是不需要說出來的。我告訴他們。票是我的一個同事的朋友買的,原本要回家過年,可是公司突然說有事,回不去了,只好轉(zhuǎn)讓票。結(jié)果正巧讓我知道了,我就趕緊買過來給你們送過來了。我怕他們說錢的事,趕緊補充:票人家沒多要一分錢,要不去火車站退票還要扣手續(xù)費呢,你們要了,正好解決了人家后顧之憂,人家還省錢了呢。 
            他們高興的說不出話來,一邊把票接過去,反復(fù)的看著,撫摸著,一邊掏錢給我。我說什么也不要。他們便怔住了臉,說我不要錢,他們就不要票。我沒辦法只好收下了錢。 
            他們走的日子比我早,我去車站送了他們。我偷偷買了些廣州特產(chǎn)和水果,在他們檢票進去的時候,把東西塞到了他們其中的一個大編織袋里。 
            看著他們拎著大包小包,里面裝滿的或許不是值錢的東西,但是臉上洋溢著的幸福的歡笑里,讓人感覺那一切都很珍貴。 
            他們不時的回頭看看我,用拎著包的手用力的跟我揮手,咧嘴笑著,眼神里的光彩很溫暖,我內(nèi)心涌起一種莫名的感動。竟然有想哭的沖動,我忍住了,也笑著朝他們揮手。 
            他們的身影漸漸消失在人群中,我沒走,站在那里,我似乎聽到了火車的鳴笛聲,那一定是他們要回家的那列火車,那火車里一定有他們要回家的兩個座位。 
            歸途很累,很遙遠,可是回家的路卻很溫暖。 
            我第一次覺得過春節(jié)不那么無聊,我第一次覺得來回的路上不那么勞累。整個年,我過的很快樂,當我再次回到廣州的時候,他們夫妻還沒回來。 
            我想,他們一定是買不到火車票,要等過了高峰期才能返回。我安靜的等在那里,看著那扇我隔壁的門,希望,在偶爾一天,能再看到那熟悉的身影。 
            他們來的真的很遲,元宵節(jié)過后一個星期才姍姍來遲。我微笑著迎接他們,端去我買的湯圓,跟他們分享我所有的快樂。 
            女人跟男人商量著:想推個小木車賣點水果或者小吃。問我的意見,我說好。與其給別人打工那么累,還不自由,倒真不如自己買點小吃賺錢好些。 
            于是夫妻倆,便買了個二手的小木車,批發(fā)了點菠蘿,西瓜,在家練熟了削菠蘿和西瓜的技術(shù),便開始上街賣起了西瓜菠蘿,一塊錢一塊。白天女人一個人去,晚上,夫妻倆一起出門,廣州這么亂,丈夫不放心,再晚都陪著老婆賣完了,再回來。第二天一早,又去上班。 
            看著他們恩愛的每天出出進進,我由衷的羨慕卻又高興著,我想,就算苦,兩個人分擔開來,也是甜的!如果將來能有這樣一個人對我說;無論痛苦災(zāi)難,我都會在你身邊。我聽了一定會哭著嫁給他,雖然我不知道要等這樣的一個人等多久,但是起碼有了憧憬,人便分外的有了希望起來。 
            有時,很晚了,還沒把削好的賣完,他們就拿回來,分給我吃。我每吃一塊就會笑著對他們說:我又吃掉你們一塊錢。 
            其實我在心里明白,他們完全可以不用送給我吃,他們生活拮據(jù),完全可以自己吃掉,剩下的又不多,水果吃了又對身體好,以前平時都不舍得買。可是他們?nèi)匀辉敢夥纸o我,因為,在他們的內(nèi)心里,他們認為是好的東西,都愿意跟別人分享。 
            記得以前,在學習和生活中,我們經(jīng)常能接觸到:無私,奉獻,善良這些美好的字眼,可是不知道什么時候我們的周圍發(fā)生了變化,在我們的字典里再也看不到那些美麗的東西,自私自利,冷漠,代替了那些小小的感動,成了我們的主流。
            當我,又一次體會到這種久違了的感覺的時候,我欣喜若狂,像個孩子撿拾到了珍貴的寶貝,我想我一定好好珍藏起來,在哪天忘記的時候拿出來看看,提醒自己。 
            那天,我下午回來,看到女人在家,很奇怪她沒出去賣東西。就半開玩笑的說:老板,該開工了?怎么還沒走?女人看到我,先是燦然的笑了笑,說:今天一天都沒出去,做買賣的家什沒了! 
            沒了?賣了?丟了?我連炮竹的問道。她說:昨晚,被城市管理者抓到了,都給砸爛了! 
            砸爛了?憑啥?我氣洶洶的問。她無奈的搖頭,說:說是影響市容市貌,還影響環(huán)境衛(wèi)生!他們沒別的事,就是專門抓小商販的! 
            我驚呆了,抓小商販的?我突然一陣悲哀,就算有一百個理由抓你們,也用不著砸打搶吧?! 跟別人說明白不就行了么?用的著這么土匪行為么? 
            女人聽了我的話,竟然笑了,說:我就心疼那菠蘿西瓜,好好的,削好的被扔了,沒削好的也被砸爛了扔的滿地是,我倒糊涂了,是我們推小車賣西瓜臟呢?還是把西瓜砸爛在地上,弄的一地西瓜渣滓臟呢?! 
            聽著女人的疑問,我竟然不知道怎么回答! 
            是啊,到底是誰更骯臟?是那賣西瓜的小販?還是那砸西瓜攤的城市管理者? 
            原本干干凈凈的一切,究竟誰是罪魁禍首,究竟是誰弄臟了我們的世界?!
            35樓 
            一輛花了一個月生活費買來的破舊的小木車,一堆花了半個月生活費買來的西瓜菠蘿,竟然在光天化日之下,被一群同樣跟你都叫做人的家伙砸了個稀巴爛,任由你苦苦哀求,任由你好話說盡,也任由你眼淚滂沱! 
            無情的打砸把你要生存的一點點希望給砸碎,冷漠的言語將你最后的自尊踐踏的體無完膚,吼來喝去的態(tài)度對你的乞求熟視無睹,就這樣,在一個人人平等的社會里,你被人踩在了腳底下! 
            我能想象的出,女人當時的那種心碎,那種絕望,那種甚至是可憐的尊嚴被踐踏的傷悲。可是,就算我再怎么去理解,我卻永遠不能替代那種傷心欲絕的體會。也許,這就是人類的悲哀,一種你無論如何不能逾越,不能跨過的鴻溝,你只能去了解,卻不能去感受。 
            我無力的想著所發(fā)生的一切,卻又無能為力的苦笑。我竟然想為她討個說話的能力都沒有,我感到了自己的有限,感到了自己總在接受了別人的恩賜后卻不能報答的那種難受,那種矛盾的苦楚。 
            我很想,再出錢幫他們買輛小車,可是女人說無論如何不敢去賣西瓜菠蘿了,不是怕城市管理者,是受不了那種活生生的好東西被糟蹋的場面,是見不得那種一片狼藉的情景。
            我盡量出些能賺錢的主意,女人說老鄉(xiāng)幫她找了個發(fā)傳單的兼職,不累,她想先做著。我看著她有些消瘦的臉龐,心很疼! 
            想著這些天發(fā)生的事,我越想越上火,恨不得把這個世界洗刷一遍,可是只我一個人的眼淚不夠,甚至全世界的人的眼淚也不夠! 
            我竟然氣的牙疼起來,半邊臉都腫了,疼的我食不下咽,鼻子也因為牙疼上火,流鼻血。我干脆請了假,去醫(yī)院看牙。 
            幾天折騰下來,吃藥,打針不管用,后來重新檢查,又說牙疼發(fā)炎引起了這里毛病,那里毛病,然后又開始治療,又一通打針,吃藥,檢查,再檢查,結(jié)果還是沒好,牙還繼續(xù)疼著,我繼續(xù)郁悶著。 
            最后,醫(yī)生覺得給我拔牙補牙!會更有效,又折騰了幾天,總算開始轉(zhuǎn)好。這一個牙疼,花了6000多塊。我才知道,原來嘴巴里長的是28顆金豆子,貴著呢! 
            可是看到新聞上那些天價醫(yī)療費,我又欣慰了,別人看個病都幾百萬呢,我才6000夠便宜的了! 
            我突然感慨起來,也許有的人能付得起天價醫(yī)療費,可是我付不起!也許我能付得起6000塊錢的治療牙疼的錢,可是有的人就付不起!和還有更多的人比我貧窮,還有更多的人看不起病!
            看病貴,看病難,這已不是什么新鮮話題,可是這個根深蒂固的問題卻始終沒得到解決!我想到我們不遠的鄰國印度,它雖然還不太富有,雖然也人口眾多,但是醫(yī)療制度卻還完善,全民醫(yī)療免費。我不由的羨慕起來,不由的想著哪天我們也能享受到此等待遇! 
            如果能有那么一天,我想,報道上就再也不會有某某小女孩得白血病家人傾家蕩產(chǎn)籌錢治病,也不會有,,
            生病是誰的錯? 身體的錯么?! 沒錢治病是誰的錯?家人的錯么?!醫(yī)療費用居高不下誰的錯?醫(yī)生的錯么?! 
            也許誰都錯了,也許誰都沒錯!
            那天,我捂著半邊臉,忍著隱隱作痛的牙,心里恨恨的想:這6000塊錢算是白花了。 
            女人自從攤子被砸了后,便兼職發(fā)傳單,可是活兒并不是天天都有,所以也是有一天沒一天的在家歇著。這天她看到我蹲在門口,抱著頭不說話,嚇壞了。 
            她拍了拍我的肩膀,我抬起頭,她才看到我的臉腫了。她心疼的問:怎么了?這是?我嘴里含糊不清的嘟囔著:倒霉啊,牙疼,快要老命了。 
            她急忙問:看醫(yī)生沒?要不要緊?我從疼痛的牙縫里擠出簡單的話:看了,沒用, 白花6000塊,現(xiàn)在是牙也疼,心也疼! 
            女人讓我張開嘴看了看,自語道:腫的很厲害,要從根里治,你等著。說完就一溜煙跑回家。 
            不大會,女人端來一碗黑乎乎的湯水要我喝,我看著臟兮兮的,就皺起了眉頭。女人硬逼著我喝下去。就這樣,連續(xù)好幾天,女人都讓我喝那種苦苦的黑湯水。結(jié)果竟然消腫了,慢慢的牙也不怎么疼了。我想一定是那黑湯水起了作用。 
            原來,女人怕在異地他鄉(xiāng)生水土不服或者有個頭疼腦熱的,就從老家?guī)Я诵┲兴庍^來,正好她老公有牙疼的毛病,就帶了些這方面的中藥。看到我疼的厲害,她就把那些藥都熬了湯給我喝,沒想到吃了幾付,就好轉(zhuǎn)了。 
            我想著,她把藥都熬給我喝了,萬一哪天她老公牙疼,可怎么辦?女人竟然笑笑:沒事,他咬咬牙就挺過去了。我知道牙疼的滋味,所以心里還是后悔吃了人家的藥。 
            我問這藥很貴吧?女人笑了:不值錢的,都是些花啊草啊的,家鄉(xiāng)的山上多的是,又不是什么高科技生產(chǎn)出來的化學**,只幾塊錢一副! 
            我開玩笑的說:幾塊錢?那我那6000塊錢不是喂狗了?女人笑了:我們那里窮,人病去不起醫(yī)院,只能找個老中醫(yī)開點中藥熬熬喝!6000塊看個牙疼,就是村長一輩子也沒這個福氣!那要多少人家一年的收入呢。 
            我聽著女人的話,開始心涼涼的。6000塊,這數(shù)字在我心里邊格外沉重。 
            女人突然問了一句:在這里的醫(yī)院生孩子要多少錢?我沉吟了一下說:估計要個一萬塊吧!女人嚇了一跳:一萬塊?那要是生完了就走,不住院呢?我想了想:也要好幾千吧!女人愣了:馬上要生了進醫(yī)院,讓醫(yī)生幫忙接生出來,我立馬走人,也要上萬么?我不用他們啥東西,就借他們點時間,搭把手就行了。 
            我沒明白女人話的意思,也沒往深處想,只是擔心著那些月收入不足千元的民工的老婆,如果來到這大都市,不小心懷孕了;來不及回鄉(xiāng)下老家生產(chǎn),,他們要拿什么去進這大城市醫(yī)院的大門,平安的把孩子生下來呢?! 
            生存是人共同的權(quán)利,如果連生存都被剝奪,或者說為生存要付出慘痛的血的代價,這樣的生存還能配的上人類賦予它的最初的意義么? 
            一個生命,一顆牙齒,一句問話,告訴我:生存= 艱辛! 
            看著自己滾圓的大腿,一天肥一圈的腰枝,近似蠕動的龐大軀體,我再也不能忍受**漸臃腫的軀體。我決定要減肥! 
            減肥,對于一個有些懶惰的人來說,是很困難的事。克服這個問題,需要一個支撐點,我想到找一個人監(jiān)督,或者找一個人陪我減肥來調(diào)動我的積極性。 
            我腦海里蹦出的第一個人,就是隔壁現(xiàn)在不用忙著上班的女人。我毫不猶豫的告訴了她我的想法,她沒遲疑就答應(yīng)了。 
            從此,她每天早晚都陪我跑步,陪我做運動。每次我都自嘲的跟她開玩笑:我真殘忍,找你這么一個皮包骨頭的瘦子跟我一起減肥!她總是安慰我:鍛煉身體有益健康是好事,不管胖瘦運動都有好處。 
            我心安理得的每天讓她陪著我,看著她越來越瘦,我又不免內(nèi)疚,可是每次她的笑臉卻又把我的那點愧疚吹的蕩然無存。我只好總是借口減肥,把好吃的,好喝的都給她,她不要,我就生氣,她沒辦法只好收下,眼里卻總是滿是不好意思的感激和受之有愧。于是她用更拼命的陪我運動來償還我對她的那點小小的恩惠。 
            我做夢也沒想到,愚人節(jié)后的第二天,她來告訴我:她要回老家了!我以為她在補上愚人節(jié)沒給我開過火玩笑的機會,可是我錯了,她是真的要回家!因為她懷孕五六個月了! 
            她本來是打算在這邊生的,后來聽我說到生孩子估計都要上萬的,就下決心提前回老家,在老家待產(chǎn)。怕再晚,挺著臨盆的大肚子坐火車不方便,所以才決定現(xiàn)在就走。 
            我驚呆了,不知道該說什么;我滿腦子浮現(xiàn)的都是,她懷孕了,我還讓她陪我做劇烈運動的鏡頭!我感到自己的可恨,一個懷孕五六個月的女人,挺著隆起的肚子天天陪在我身邊,我竟然視而不見,是我自私到只考慮自己?還是我冷漠到忘記了他人死活? 
            想著她每天笑靨如花,從來沒表現(xiàn)出半點怨言和不高興,我第一次感到自己的可惡。我開始鄙視自己,憎恨自己那種習慣于接受別人付出的不良嗜好。 
            看上去,她更瘦了,于是我更痛恨起自己來。也許她每天沒命的跟我鍛煉,回家卻吃不飽,第二天卻要半餓著肚子繼續(xù)陪我運動,肚子里還有一個消耗著營養(yǎng)的胎兒,這是怎樣的一份艱辛的心情?這是怎樣的一種殘忍的場面? 
            當我大吃大喝,山珍海味的把自己喂養(yǎng)成一個十足的胖子,卻要求一個每天吃不飽,餓著肚皮的孕婦跟我一起運動減肥?!這就是人性的自私,這就是我的自私到極點的本質(zhì)的最有力說明。 
            我不得不承認,自始至終,我并沒高尚到哪里去,我還是那個第一次見他們的時候的那個齷齪的人,盡管極力想用幫助別人來掩蓋自己的哪些自私的本性,可是還是失敗了,本質(zhì)像個烙印,已經(jīng)刻進了我的靈魂深處! 
            面對這著這樣一個殘酷的事實,我開始無地自容,我突然感覺我根本配不上做他們的朋友,盡管我曾那么的想,但是我不夠格,也沒資格去填下那份上帝面前的契約,我只是個自私的懦夫,我沒權(quán)利要求靈魂對我有任何絲毫的原諒! 
            我被自己重重的摔倒在地上,被人性的刀子割的體無完膚。那感覺很痛;很麻木! 
            我的所有的思想,他們并沒有任何的覺察,只是用一種悲傷的情緒跟我道別。 
            女人是一個人走的,為了省錢,女人死活沒讓男人送。 
            我不知道一個挺著肚子的女人,拎著大包小包好幾個,在熙熙攘攘的人群中是怎樣擠上了火車,又是怎樣的一個人孤孤單單的回到了家。但是,我知道,如果是我,我做不到,不是沒勇氣,是沒那個能力! 
            沒幾天,男人就搬走了,因為他覺得一個人住個幾百塊的房子不劃算,賺的錢都搭在住上了,為了省錢,他選擇了免費的,和一群民工一起住在一個橋下搭的窩棚里。男人臨走的時候,我給了他一個信封,信封里有一封我寫給他老婆的信和一張銀行卡。我叮囑他,無論如何,回家的時候記得把信帶給他老婆。他點頭答應(yīng)著,很堅定的說:保證完成任務(wù)。 
            從此我隔壁的儲藏室空出來了,房東說我可以放我那張舊沙發(fā)了,可是我沒放,只是在每次經(jīng)過的時候,都會停下來,默默的盯著房門看很久,很久。 
            從那以后,我再也沒見過他們夫妻二人。我不知道男人還在不在他說的橋下的窩棚里住著,也不知道他有沒有時間回老家一趟順便把我的那封信交給他老婆,更不知道在那個我連名字都叫不出來的他們的老家,他的老婆是否安好。 
            只是,從他們離開后,我開始喜歡穿平跟鞋,因為那感覺很踏實。 
            踏實到,我想著明天開始一個人學會為自己的心靈搬家。

            posted @ 2011-09-11 19:04 陳曉 閱讀(357) | 評論 (0)編輯 收藏

            2011年8月9日 #

            spy++和游戲修改器

            這幾天做了兩個東西,spy++ 和游戲修改器。 spy++ 就是模仿 vs的那個工具spy++ 。游戲修改器,就是暴力搜索內(nèi)存,找到我們關(guān)心的數(shù)據(jù),然后進行更改。
            總之這些東西做過之后感覺就是都不難,但是在做的時候多少會感覺點吃力。唉,功力不夠啊。繼續(xù)修煉……
            閑下來無事,記錄下它們的過程吧。
            spy++ 分析(用vs2005做的——)
            spy++ 需要拖動一個小圖標 然后移動到別的窗口上(本窗口也可以),然后畫出窗口的矩形,得到窗口的一些信息。
            拖動的這個小圖標,是一個picture conctrl控件 ,屬性的type改成icon 也就是加載一個icon圖標,在屬性imag里把圖標選上。
            給這個控件添加一個類,在這個類里做這個控件的 小圖標拖動操作,即 lbuttondown的時候 把鼠標加載成 小圖標,把picture里的icon換成空心的。
            當鼠標抬起的時候把鼠標換回來原先的光標,然后再把picture里的icon換成有小圖標的那個圖標。
            這里要主次 要把鼠標設(shè)成全局有效,要不然的話,鼠標位置出了這個picture的范圍就失效了。函數(shù)是 SetCapture()
            然后再lbuttonup的時候記得 要釋放。ReleaseCapture();
                       就是這幾個圖標。吼吼。
            把這個小圖標托到 窗口上的時候怎么在窗口上畫出矩形呢? 
            當然是先得到這個矩形了。我要先得到這個窗口的句柄,我們才能得到windowrect 然后才能畫。
            所以各 下一步就是WindowFromPoint(Point)傳一個鼠標點 然后得到這個點的window的hWnd了 哈,很強大的函數(shù)啊。
            得到窗口句柄就好辦了。GetWindowRect得到矩形區(qū)域啊,然后用windowdc 畫,用windowdc的原因就是,我們要在整個桌面上都能畫。
            這里畫這個矩形有個技巧,我們要畫出來,但是當我們不需要這個矩形的時候我們還要給這個顏色畫回原來的背景色。這里算是整個程序的一個難點,考驗畫圖工夫。
            dc設(shè)備中默認選入的是一個黑色畫筆,一個白色畫刷,也就是說正常我們畫矩形的話會畫出黑邊白底得矩形,現(xiàn)在我們要透明的底,然后畫的黑邊還要可畫回原先的背景色。有一個函數(shù)通過dc調(diào)用  dc.SetROP2(R2_NOTXORPEN);參數(shù)傳這個同或運算,這個函數(shù)的意思就是,拿你設(shè)備中的畫筆畫刷 去跟背景色運算,同或運算。
            比如背景有個顏色是10010100011   你的畫刷顏色是白色 也就是111111111111(比如就這么多位)  白色因為是255,255,255所以都是1  
            然后進行同或運算得到的是什么?是10010100011(同或,同則1,不同則0)!也就說 還是背景色,這就做到了畫刷透明。然后畫筆是黑色,0000000000
            跟背景色同或運算的到得是01101011100 這個。然后這個就是真正畫到屏幕上顯示出來的顏色。怎么在把這個顏色畫沒呢?大家在用這個黑色的畫筆畫一下,在同或運算看看結(jié)果是什么?10010100011 看看是不是又變回去了?吼吼。等會下面貼代碼畫圖這里的。
            這個畫圖就完事了。而且窗口句柄我們也通過windowfrompoint得到了。有了窗口句柄我們能得到很多東西了。
            比如說窗口類名GetClassName
            窗口標題GetWindowText
            窗口矩形GetWindowRect
            窗口id等信息GetWindowLong
            進程id   GetWindowThreadProcessId
            進程路徑 OpenProcess()   GetModuleFileNameEx();

            還可以向窗口中發(fā)消息 sendmessage(這個比較好玩,可以拿你的spy++去關(guān)閉別人的窗口。
            然后把他設(shè)置到窗口上就可以了。
            代碼貼一小段。

            void CMyPic::OnTimer(UINT_PTR nIDEvent)
            {
                POINT p;
                ::GetCursorPos(
            &p);
                hWnd
            =::WindowFromPoint(p);
                CRect rect;
                ::GetWindowRect(hWnd,
            &rect);
                CWindowDC dc(NULL);
                CPen redpen(PS_SOLID,
            3,RGB(255,0,0));
                dc.SelectObject(
            &redpen);
                dc.SetROP2(R2_NOTXORPEN);
                dc.Rectangle(rect);
                
            //顯示回去 就向沒畫一樣
                Sleep(300);
                dc.Rectangle(rect);
                ReleaseDC(
            &dc);
                CStatic::OnTimer(nIDEvent);
            }

            這個畫圖在timer里畫,能做到 閃動的巨型。(我選的紅色畫筆,你可以把紅色跟背景同或算算,跟黑色是一樣的,在畫一次就能畫回來背景色)
            下面的代碼是 寫我的spy++的第一頁的代碼

            void CMyspyDlg::UpdataWindowNormal(HANDLE hWnd)
            {
             CString str;
             int state=((CButton *)GetDlgItem(IDC_CHECK1))->GetCheck();
             //窗口句柄
             if (state==BST_CHECKED)
             {
              str.Format(_T("%p"),hWnd);
             }
             else
             {
              str.Format(_T("%d"),hWnd);
             }
             m_TabCtrl.m_dlg[0].GetDlgItem(IDC_EDIT_HANDLE)->SetWindowText(str);
             //窗口類名
             TCHAR tempTC[50];
             GetClassName((HWND)hWnd,tempTC,49);
             m_TabCtrl.m_dlg[0].GetDlgItem(IDC_EDIT_CLASSNAME)->SetWindowText(tempTC);
             //窗口標題
             ZeroMemory(tempTC,100);
             ::GetWindowText((HWND)hWnd,tempTC,49);
             if (*tempTC==_T('\0'))
             {
              m_TabCtrl.m_dlg[0].GetDlgItem(IDC_EDIT_TITLE)->SetWindowText(_T("無"));
             }
             else
             {
              m_TabCtrl.m_dlg[0].GetDlgItem(IDC_EDIT_TITLE)->SetWindowText(tempTC);
             }
             //窗口矩形
             CRect rect;
             ::GetWindowRect((HWND)hWnd,&rect);
             str.Empty();
             if (state==BST_CHECKED)
             {
              str.Format(_T("x=%x,y=%x,width=%x,hight=%x"),rect.left,rect.top,rect.Width(),rect.Height());
             }
             else
             {
              str.Format(_T("x=%d,y=%d,width=%d,hight=%d"),rect.left,rect.top,rect.Width(),rect.Height());
             }
             m_TabCtrl.m_dlg[0].GetDlgItem(IDC_EDIT_WINRECT)->SetWindowText(str);
             //窗口id
             str.Empty();
             LONG l=::GetWindowLong((HWND)hWnd,GWL_ID);
             str.Format(_T("%ld"),l);
             m_TabCtrl.m_dlg[0].GetDlgItem(IDC_EDIT_WINID)->SetWindowText(str);
             //進程id
             DWORD dword;
             ::GetWindowThreadProcessId((HWND)hWnd,&dword);
             str.Empty();
             if (state==BST_CHECKED)
             { 
              str.Format(_T("%p"),dword);
             }
             else
             {
              str.Format(_T("%d"),dword);
             }
             m_TabCtrl.m_dlg[0].GetDlgItem(IDC_EDIT_PROCESSID)->SetWindowText(str);
             //程序路徑
             HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,dword);
             TCHAR src[200];
             GetModuleFileNameEx(hProcess,NULL,src,199);
              m_TabCtrl.m_dlg[0].GetDlgItem(IDC_EDIT_PROSRC)->SetWindowText(src);
            }

            ======================================================================
            效果圖

            ======================================================================

            好了 下面記錄下游戲修改器
            其實我用的方法很笨的,但是比較簡單。改成功了植物大戰(zhàn)僵尸中的太陽值。
            =======================================================================
            效果圖

            =======================================================================
            這個游戲修改 就是讀內(nèi)存,值進行比較,然后找到一些跟你輸入的值相同的地址,記錄在鏈表中,然后讓這個值變化,在對鏈表進行搜索
            如果鏈表中的地址中的值也變化了,正確的地址就在這鏈表里,繼續(xù)變化值,之后最后地址確定下來為止,地址確定下來之后就可以修改了。
            其中用到得函數(shù) 先是 快照,(我在前面做任務(wù)管理器中寫到過) 得到進程id 進程名等。
            然后用openprocess打開方式用要可讀,可寫,或者獲得所有權(quán)PROCESS_ALL_ACCESS。得到進程的句柄。
            然后通過進程的句柄讀進程中的數(shù)據(jù)ReadProcessMemory因為虛擬內(nèi)存共有4gb  后2gb是系統(tǒng)用,還有前多少K(不同系統(tǒng)不一樣)也系統(tǒng)用。所以我們只搜索前兩gb ,但是前面那些系統(tǒng)的我們就忽略了,畢竟是小數(shù),不在乎多讀那點了。
            ReadProcessMemory這個函數(shù)第一個參數(shù)是進程handle,第二個參數(shù) 是基址(即從那個位置開始讀,是一個地址),第三個參數(shù)是讀出的buff 第四個是讀的大小。 由于內(nèi)存頁是4kb 我們?yōu)榱俗x的速度快 所以我們每次就讀4kb。 讀出這4kb 放入buff中 然后 拿我們要找的數(shù)值比如是100,(我們假定我們的數(shù)是2字節(jié)),在4kb中1字節(jié)1字節(jié)的向后走,兩字節(jié)兩字節(jié)的比較 如果等于100則加入鏈表
            DWORD dOneGB=1024*1024*1024;//1gb的地址
             DWORD dBase=0;//基址是0
             DWORD dOnePage=4*1024;//一個內(nèi)存頁4kb
             BYTE buffer[4*1024];//裝一個內(nèi)存也
             WORD value;
             CString str;
             int pos=0;
             POSITION listpos;
            //得到我們窗口上輸入的值 value
             GetDlgItem(IDC_EDIT_INPUT)->GetWindowText(str);
             value=_wtoi(str);
             for (dBase;dBase<dOneGB*2;dBase+=dOnePage)//遍歷2gb每次 加一頁  4kb
             {
              if(ReadProcessMemory(hProcess,(LPCVOID)dBase,buffer,4*1024,NULL))//讀一個頁,因為這個讀取是不一定成功的所以加if(有的內(nèi)存系統(tǒng)不讓你讀)
              { 
            //進行比較 如果相同加入鏈表CList m_Data;
               for(DWORD b=0;b<dOnePage-1;b++)
               {
                WORD tempword=*((WORD *)(buffer+b));
                if (tempword==value)
                {
                 if (pos==0)//如果是頭結(jié)點就 加在頭上,之后就加在后邊
                 {
                  listpos = m_Data.AddHead(dBase+b);
                  pos++;
                 }
                 else
                 {
                  listpos = m_Data.InsertAfter(listpos,dBase+b);
                 }
                }
               }
              }
             }

            這樣這個第一次搜索就完成了。搜出了一堆 等于100的值 的地址,放入了鏈表
            下次就是   改變100為150,然后再鏈表中搜索等于150的。
            int dataCount=m_Data.GetCount();
             pp=m_Data.GetHeadPosition();
              for (int i=0;i<dataCount;i++)
              {
               DWORD tempvalue=m_Data.GetNext(pp);
            //根據(jù)基址讀出兩個字節(jié)的數(shù),然后跟value比較
               ReadProcessMemory(hProcess,(LPCVOID)tempvalue,&buff,2,NULL);
               if(buff==value)
               {
               if (head)
               {
                li.AddHead(tempvalue);
                head=FALSE;
               }
               else
               {
                li.AddTail(tempvalue);
               }
               }
              }
            哈哈,然后最后就搜到了那個值得地址,,然后根據(jù)這個地址改變 其中的值就行了

            WriteProcessMemory(hProcess,(LPVOID)address,&newValue,2,NULL);
            思路倒是很簡單,寫的時候總會出錯誤,或是內(nèi)存錯誤或是中斷的,要耐心調(diào)調(diào)。
            為了植物大戰(zhàn)講師的無限陽光,吼吼。go


             

            posted @ 2011-08-09 15:06 陳曉 閱讀(4026) | 評論 (8)編輯 收藏

            2011年8月1日 #

            進程通信——郵槽和命名管道

            今天記錄下自己學的郵槽和命名管道,學習過程中遇到點問題也拿出來分享下。哈  開整
            先說一下大體的概念奧。

            郵槽定義

            郵槽(Mailslot)也稱為郵件槽,是Windows 提供的進程間通信的手段,

            其提供的是基于不可靠的,郵件槽只支持單向數(shù)據(jù)傳輸,也就是服務(wù)器只能接收數(shù)據(jù),而客戶端只能發(fā)送數(shù)據(jù),

            何為服務(wù)端?創(chuàng)建郵槽的那一端就是服務(wù)端。
            還有需要提及的一點是,客戶端在使用郵槽發(fā)送數(shù)據(jù)的時候只有當數(shù)據(jù)的長度 < 425 字節(jié)時,

            才可以被廣播給多個服務(wù)器,如果消息的長度 > 425 字節(jié)的話,那么在這種情形下,郵槽是不支持廣播通信的。
            這是我看到的郵槽的簡要說明吧。
            先說下郵槽的使用過程吧。然后再分析函數(shù),在貼代碼。非常簡單哦
            服務(wù)端:                                        客戶端:
            首先創(chuàng)建郵槽CreateMailslot               打開油槽CreateFile
            讀取數(shù)據(jù) ReadFile                           寫入數(shù)據(jù)WriteFile
            完事了,只有這四個函數(shù)。也很容易理解。 客戶端寫入數(shù)據(jù) 服務(wù)端讀取數(shù)據(jù)。
            CreateMailslot(_T("\\\\.\\mailslot\\chenxiao"),0, MAILSLOT_WAIT_FOREVER,NULL);
            第一個參數(shù)是個固定格式\\.\\mailslot\\name   點代表本機。mailslot是硬編碼 不能變,name可以自己起個郵槽的名字。‘\’放入字符串中要用轉(zhuǎn)義字符\
            所以就寫成了"\\\\.\\mailslot\\chenxiao"
            第二個參數(shù)To specify that the message can be of any size, set this value to zero. 設(shè)置成0
            第三個參數(shù)為了下面的讀取操作應(yīng)該等待的時間 MAILSLOT_WAIT_FOREVER 傳這個代表參數(shù)代表永久等待。
            最后一個參數(shù)安全屬性 嘎嘎 null
            ReadFile(hMailSlot,pData,sizeof(TCHAR)*80,&dByteRead,NULL);
            這幾個參數(shù)很簡單了。第一個參數(shù)就是創(chuàng)建郵槽返回來的句柄 第二個參數(shù)一個[out]buffer用來接收從郵槽中讀出來的東東。第三個參數(shù)就是讀取多少個字節(jié)。
            第四個參數(shù)基本沒用,是一個[out]的LPDWord  很蛋疼只能DWORD dByteRead; 然后傳個他的地址。
            因為msdn上說了If lpOverlapped is NULL, lpNumberOfBytesRead cannot be NULL;
            lpoverlapped就是我們的最后一個參數(shù),這個參數(shù)可以設(shè)置同步和異步,如果文件打開模式是FILE_FLAG_OVERLAPPED這個的話,我們這個就不可以是NULL
            這個同步異步問題我在下面的命名管道中在說。這里就先過去。這個參數(shù)設(shè)成NULL。
            客戶端函數(shù)
            CreateFile(_T("\\\\.\\mailslot\\chenxiao"),GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL);
            這幾個參數(shù)也很容易理解了。第一個參數(shù)要和創(chuàng)建郵槽的時候的參數(shù)一樣。如果要遠程通信的話可以把‘.’設(shè)置成服務(wù)器 主機名 或者在一個區(qū)域內(nèi)廣播‘*’
            但是我用兩個機器實驗了,沒有成功,目前我只能用郵槽在本地一個機器上通信。。。尷尬。。有知道怎么在兩個機器上通信的,要給我留言教教我哦。
            后幾個參數(shù)根據(jù)參數(shù)名大家就可以猜個差不多了,我就不說了。吼吼。
            WriteFile(hMailSlot,str,sizeof(TCHAR)*80,&dByteWrite,NULL);這個函數(shù) 跟 readfile差不多 就是向郵槽中寫入數(shù)據(jù)用的。
            第二個參數(shù)是要寫入的內(nèi)容,第三個是大小(以字節(jié)為單位).
            好了這幾個函數(shù)都說完了。貼上小代碼,就清晰了。

            //服務(wù)器端 我用的c++寫的。
            #include <iostream>
            #include 
            <Windows.h>
            #include 
            <tchar.h>
            using namespace std;


            int main()
            {
                HANDLE hMailSlot
            =CreateMailslot(_T("\\\\.\\mailslot\\chenxiao"),0,
                    MAILSLOT_WAIT_FOREVER,NULL);
                 TCHAR pData[
            80];
                 ZeroMemory(pData,
            sizeof(TCHAR)*80);
                 DWORD dByteRead;
                 
            while(1)
               
            {
                     BOOL b
            =ReadFile(hMailSlot,pData,sizeof(TCHAR)*80,&dByteRead,NULL);
                      wprintf_s(_T(
            "%s\n"),pData);
                 }

                
                system(
            "pause");
                
            return 0;
            }
            //客戶端我在mfc中寫的。
            void CclientDlg::OnBnClickedButtonSend()
            {
                 TCHAR str[
            80];
                ZeroMemory(str,
            sizeof(TCHAR)*80);
                 GetDlgItem(IDC_EDIT_INPUT)
            ->GetWindowText(str,70);
                 DWORD dByteWrite;
                 HANDLE hMailSlot
            =CreateFile(_T("\\\\.\\mailslot\\chenxiao"),GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,
                     FILE_ATTRIBUTE_NORMAL,NULL);
                
            if (hMailSlot==INVALID_HANDLE_VALUE)
                
            {
                    MessageBox(_T(
            "createfile失敗,請打開服務(wù)器"));
                    
            return ;
                }

                 BOOL b
            =WriteFile(hMailSlot,str,sizeof(TCHAR)*80,&dByteWrite,NULL);
                 GetDlgItem(IDC_EDIT_INPUT)
            ->SetWindowText(_T(""));
                 CloseHandle(hMailSlot);
            }


            這就是運行結(jié)果啦。這個東西沒啥大用。就是學習一下而已。以后萬一用到也能弄弄。

            下面我說下命名管道。這個東西坑了我一下午。。。
            郵槽建立的是無連接的通信。。那么命名管道 就是有鏈接的可靠的通信了。他跟郵槽挺相似的。但是比郵槽好很多。
            同上面。我粘一些概念性的東西。

            命名管道是通過網(wǎng)絡(luò)來完成進程之間的通信的,命名管道依賴于底層網(wǎng)絡(luò)接口,

            其中包括有 DNS 服務(wù),TCP/IP 協(xié)議等等機制,但是其屏蔽了底層的網(wǎng)絡(luò)協(xié)議細節(jié),

            對于匿名管道而言,其只能實現(xiàn)在父進程和子進程之間進行通信,而對于命名管道而言,

            其不僅可以在本地機器上實現(xiàn)兩個進程之間的通信,還可以跨越網(wǎng)絡(luò)實現(xiàn)兩個進程之間的通信。

            命名管道使用了 Windows 安全機制,因而命名管道的服務(wù)端可以控制哪些客戶有權(quán)與其建立連接,

            而哪些客戶端是不能夠與這個命名管道建立連接的。

            利用命名管道機制實現(xiàn)不同機器上的進程之間相互進行通信時,

            可以將命名管道作為一種網(wǎng)絡(luò)編程方案時,也就是看做是 Socket 就可以了,

            它實際上是建立了一個客戶機/服務(wù)器通信體系,并在其中可靠的傳輸數(shù)據(jù)。

            命名管道的通信是以連接的方式來進行的,

            服務(wù)器創(chuàng)建一個命名管道對象,然后在此對象上等待連接請求,

            一旦客戶連接過來,則兩者都可以通過命名管道讀或者寫數(shù)據(jù)。          

            命名管道提供了兩種通信模式:字節(jié)模式和消息模式。

            在字節(jié)模式下,數(shù)據(jù)以一個連續(xù)的字節(jié)流的形式在客戶機和服務(wù)器之間流動,

            而在消息模式下,客戶機和服務(wù)器則通過一系列的不連續(xù)的數(shù)據(jù)單位,進行數(shù)據(jù)的收發(fā),

            每次在管道上發(fā)出一個消息后,它必須作為一個完整的消息讀入。

            我相信很多人看了幾句就跳到這里來了。。概念性的東西 確實太不好玩了。我也不愛看。。哈哈
            介紹命名管道需要的函數(shù)。
            服務(wù)器端

            CreateNamedPipe 創(chuàng)建命名管道

             ConnectNamedPip  連接
            ReadFile    讀
            WriteFile  寫

            客戶端

            WaitNamedPipe 查看命名管道
            CreateFile  打開命名管道
            WriteFile ReadFile  寫   讀

            就這些東西,今天由于不仔細看msdn 寫程序?qū)懨闪恕!!5葧以谡f啊。大家要注意哦。
            CreateNamedPipe(_T("\\\\.\\pipe\\chenxiao"),PIPE_ACCESS_DUPLEX|FILE_FLAG_OVERLAPPED,PIPE_TYPE_BYTE,1,1024,1024,2000,NULL);
            很多參數(shù)啊!不怕不怕 慢慢來
            第一個我略過了哦。第二個大家在msdn上可以看到有
            PIPE_ACCESS_DUPLEX   讀寫雙向
            PIPE_ACCESS_INBOUND   數(shù)據(jù)只能從客戶端到服務(wù)端
            PIPE_ACCESS_OUTBOUND  和上面那個相反
            這個參數(shù)我們設(shè)置成 第一個。然而通過msdn大家可以看到這個參數(shù)可以附加 flag  我們就附加FILE_FLAG_OVERLAPPED 這個了
            MSDN那一大堆英文我也瞅不太明白,大至意思就是這個呢 用了這個參數(shù) 程序操作讀,寫,連接等操作,可以立馬返回。比如說讀一個大文件吧

            你把這個文件從頭讀到偉 需要很長時間。這樣的話你的readfile函數(shù)就不會反回  就會阻塞在那里一直讀。這樣很不好,所以有了這個參數(shù)。這個參數(shù)就是使你的讀 寫 等待函數(shù)立馬返回,這個就屬于程序的異步,這個讀函數(shù)和主程序一起執(zhí)行。
            下一個參數(shù)就是以字節(jié)流還是消息方式發(fā)送文件 讀取文件。我們采用字節(jié)流方式PIPE_TYPE_BYTE。
            下一個參數(shù)是最多可以創(chuàng)建幾個命名管道 比如我們設(shè)置成3,就是可以創(chuàng)建3個這樣的管道。我們這里設(shè)置成1,我們只用一個管道做演示就行。然后是分配的輸入 輸出 緩沖區(qū)大小 ,就類似創(chuàng)建線程時分配棧空間大小一樣。然后是一個超時時間設(shè)置 這個設(shè)置成0就可以。最后一個NULL安全屬性

            ConnectNamedPipe服務(wù)端的連接管道函數(shù)這個函數(shù)兩個參數(shù)第一個參數(shù)句柄,第二個參數(shù)一個結(jié)構(gòu)體對象
            這個結(jié)構(gòu)體呢 里面有一個事件句柄。剛才上邊由于設(shè)置了異步,所以你要有一個標志著讀結(jié)束的標志,這個標志就用的這個事件。創(chuàng)建這個事件要設(shè)置成手動的,初始為無信號。

            這樣服務(wù)端的就寫完了。
            然后再說一下客戶端的函數(shù)
            WaitNamedPipe(_T("\\\\.\\pipe\\chenxiao"),0);
            這個函數(shù)呢就屬于一個查看函數(shù),看看有沒有叫chenxiao的命名管道
            大家不要認為這個函數(shù)可以打開命名管道 或者連接管道
            大家從msdn上可以看到這句話If the function succeeds,the process should use the CreateFile function to open a handle to the named pipe
            今天我由于沒看到這句話苦苦弄了一個下午也沒連上管道5555555555
            在客戶端可以用waitnamedpipe檢查下有沒有這個管道 然后再createfile打開它。
            哦了 搞定了。搞上我的代碼瞅瞅效果。

             

            //服務(wù)器端的代碼  MFC寫的

            void CPipeServerDlg::OnBnClickedButtonCreate()
            {
                m_hNP
            =CreateNamedPipe(_T("\\\\.\\pipe\\chenxiao"),
                    PIPE_ACCESS_DUPLEX
            |FILE_FLAG_OVERLAPPED,
                    PIPE_TYPE_BYTE,
            1,1024,1024,0,NULL);
                
            if (m_hNP==INVALID_HANDLE_VALUE)
                
            {
                    MessageBox(_T(
            "創(chuàng)建管道失敗"));
                }

                
            else
                
            {
                    MessageBox(_T(
            "創(chuàng)建管道成功"));
                }

                
            //連接-----------------------------
                
                OVERLAPPED op;
                ZeroMemory(
            &op,sizeof(OVERLAPPED));
                op.hEvent
            =CreateEvent(NULL,TRUE,FALSE,NULL);
                BOOL b
            =ConnectNamedPipe(m_hNP,&op);
                
            if (WaitForSingleObject(op.hEvent,INFINITE)==0)
                
            {
                    MessageBox(_T(
            "connect成功 haha"));
                }

                
            else
                
            {
                    MessageBox(_T(
            "create fail"));
                }

            }


            void CPipeServerDlg::OnBnClickedButtonWrite()
            {

                TCHAR buff[
            100]=_T("來自服務(wù)器的信息");
                DWORD d;
                WriteFile(m_hNP,buff,
            200,&d,NULL);
            }


            void CPipeServerDlg::OnBnClickedButtonRead()
            {
                TCHAR buff[
            100];
                ZeroMemory(buff,
            200);
                DWORD d;
                ReadFile(m_hNP,buff,
            200,&d,NULL);
                MessageBox(buff);
            }

             

            //客戶端的代碼 MFC寫的


            void CPipeClientDlg::OnBnClickedButtonOpenpipe()
            {
                BOOL b
            =WaitNamedPipe(_T("\\\\.\\pipe\\chenxiao"),0);
                
            //BOOL b=1;
                m_hFile = CreateFile(_T("\\\\.\\pipe\\chenxiao"), 
                    GENERIC_READ 
            | GENERIC_WRITE,
                    
            0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
                
            if (!b||m_hFile==INVALID_HANDLE_VALUE)
                
            {
                    MessageBox(_T(
            "連接失敗"));
                }

                
            else
                
            {
                    MessageBox(_T(
            "連接成功"));
                }

            }


            void CPipeClientDlg::OnBnClickedButtonRecieve()
            {
                TCHAR buff[
            100];
                ZeroMemory(buff,
            200);
                DWORD d;
                ReadFile(m_hFile,buff,
            200,&d,NULL);
                MessageBox(buff);
            }


            void CPipeClientDlg::OnBnClickedButtonSend()
            {
                TCHAR buff[
            100]=_T("client's message");
                DWORD d;
                WriteFile(m_hFile,buff,
            200,&d,NULL);
            }

            下圖程序運行效果圖

            哇卡卡阿卡














             

            posted @ 2011-08-01 22:14 陳曉 閱讀(5353) | 評論 (6)編輯 收藏

            2011年7月31日 #

            進程通信——剪貼板

            由于在啟動一個進程后,操作系統(tǒng)會給這個進程分配 4GB 的私有地址空間,至于為何有 4GB 這么大,

            那得考慮進程的私有地址空間和實際物理內(nèi)存地址空間之間的映射以及頁交換等等細節(jié)問題了,這里不予討論,

            既然操作系統(tǒng)給每一個進程分配的是私有地址空間,自然,這段地址空間也只有這個進程自己才能訪問了,
            既然這段私有地址空間只能由進程本身訪問,那也就說明別的進程是不能夠隨意的訪問這個進程的地址空間的,

            而上面又說任意兩個進程之間是并能夠互相訪問對方的私有地址空間的,都不能訪問了,那還通信個屁啊 ?

            自然上面的訪問對方進程的私有地址空間是行不通了,那應(yīng)該還有其他辦法的 !!!

            如果我在物理內(nèi)存中劃分出一塊內(nèi)存,這一塊內(nèi)存不為任何的進程所私有,但是任何的進程又都可以訪問這塊內(nèi)存,

            那么 進程 A 就可以往這塊內(nèi)存中存放數(shù)據(jù) Data ,然后 進程 B 也是可以訪問這塊內(nèi)存的,從而 進程 B 就可以訪問到數(shù)據(jù) Data 了,

            這樣不就實現(xiàn)了 進程 A 進程 B 之間的通信了 !!!

            而上面的這種思路就是剪貼板了。

            當然解決進程間通信還有好幾種思路,本文暫只介紹利用剪貼板來實現(xiàn)進程間的通信。
            前面
            這段話是我抄過來的,呵呵,自己寫不了這種書面語。
            我寫一下我對剪貼板的使用,我也是新學的,有不對的地方還請大家指點。

            向剪貼板中寫入數(shù)據(jù)
            打開剪貼板 OpenClipboard
            清空剪貼板 EmptyClipboard
            設(shè)置剪貼板數(shù)據(jù)SetClipboardData
            關(guān)閉剪貼板CloseClipboard

            從剪貼板讀取數(shù)據(jù)
            打開剪貼板 OpenClipboard
            判斷數(shù)據(jù)類型IsClipboardFormatAvailable
            得到剪貼板數(shù)據(jù)GetClipboardData
            關(guān)閉剪貼板CloseClipboard

            我在說下具體的函數(shù)怎么用
            Openclipboard大家在msdn上可以看到 僅有一個參數(shù)hWndNewOwner
            這個參數(shù)表明那個窗口擁有剪貼板的使用權(quán) 已在此窗口中打開,別的窗口中調(diào)用openclipboard就會失敗
            這個參數(shù)可以設(shè)置成null。If this parameter is NULL, the open clipboard is associated with the current task
            呵呵,這個設(shè)成null之后 在后邊的 setclipboarddata 就不能采用延遲發(fā)送了。因為……等會說延遲發(fā)送就會知道了。(這是我試驗得出的結(jié)論,應(yīng)該沒問題)
            這個參數(shù)我們暫且設(shè)為窗口句柄 m_hWnd(我用的MFC編的)
            EmptyClipboard這個函數(shù)就沒什么說的了。就是清空剪貼板的數(shù)據(jù) 還有就是The function then assigns ownership of the clipboard to the window that currently has the clipboard open.
            SetClipboardData( UINT uFormat, HANDLE hMem);
            有兩個參數(shù)第一個參數(shù)是數(shù)據(jù)類型 我們設(shè)置成CF_UNICODETEXT。
            第二個參數(shù)是the hMem parameter identifies a memory object, the object must have been allocated using the function with the GMEM_MOVEABLE flag.
            這句話得意思就是 hmem是塊內(nèi)存對象的句柄 這塊內(nèi)存要是GMEM_MOVEABLE 型的。這又要引進一個申請內(nèi)存的函數(shù)。平常我們用的malloc new 等都是
            在自己的進程中申請空間,如果用他們 我們的通信也就通不成了。所以我們要申請個全局的內(nèi)存空間
            GlobalAlloc(GMEM_MOVEABLE,dwBytes);第一個參數(shù)就是可移動的意思(當別人申請一塊大空間的時候 比如我們申請的空間比較散亂占用了一部分空間 別人就申請不了一整塊大的空間了。這樣我們的空間如果是可移動的,就會被移動的凝聚一些,別人就有地方申請大的空間了,紅色是我們申請的凌亂的空間,綠色是又想申請的一大塊)。

            這個我不在這里多講,內(nèi)存管理我懂的也不太多。不懂的可以找找內(nèi)存管理方面的書。 第二個參數(shù)就是空間大小。

            這樣我們完成了設(shè)置剪貼板數(shù)據(jù) ,然后我們關(guān)閉剪貼板就行了。
            讀取簡單一些。
            ::OpenClipboard(m_hWnd)
            IsClipboardFormatAvailable(CF_UNICODETEXT)//判斷剪貼板內(nèi)數(shù)據(jù)類型
            HANDLE hClip=::GetClipboardData(CF_UNICODETEXT)//得到剪貼板的句柄
            然后就是使用里面的數(shù)據(jù)了。這里要注意,一定要給數(shù)據(jù)上鎖 ,就是說我們在使用數(shù)據(jù)的這個時間內(nèi),別人不準移動我們的內(nèi)存。這個大家能理解吧。
            TCHAR * p=(TCHAR *)GlobalLock(hClip);//強制裝換成我們的寬字符  上鎖
            MessageBox(p);輸出即可
              GlobalUnlock(hClip);  解鎖
              ::CloseClipboard();
            這就完成了,我貼一段代碼上來哦

            //這個是寫入剪貼板
                if(!::OpenClipboard(m_hWnd))
                
            {
                    MessageBox(_T(
            "打開剪切板失敗"));
                }

                ::EmptyClipboard();
                  CString str
            =_T("hahaaha");
                  HGLOBAL  hG
            =GlobalAlloc(GMEM_MOVEABLE,sizeof(_T("hahaaha"))+2);
                  _tcscpy_s((wchar_t 
            *)GlobalLock(hG),sizeof(_T("hahaaha"))/2+1,str);
                  GlobalUnlock(hG);
                ::SetClipboardData(CF_UNICODETEXT,hG);
                ::C
            //這個是從剪貼板中讀出數(shù)據(jù)
            if(!::OpenClipboard(m_hWnd))
                     
            {
                         MessageBox(_T(
            "打開剪切板失敗"));
                        
            return ;
                     }

                    
            if (::IsClipboardFormatAvailable(CF_UNICODETEXT))
                
            {

                    HANDLE hClip
            =::GetClipboardData(CF_UNICODETEXT);
                    TCHAR 
            * p=(TCHAR *)GlobalLock(hClip);
                    MessageBox(p);
                    GlobalUnlock(hClip);
                    ::CloseClipboard();
                }

                
            else
                
            {
                    MessageBox(_T(
            "剪貼板的內(nèi)容不是unicode"));
                }


            然后最后我在說說延遲發(fā)送setclipboarddata 的第二個參數(shù)傳為null 就為延遲發(fā)送
            延遲發(fā)送就是一開始點寫入剪貼板的時候不寫入,然后另一個進程想要得到剪貼板里的信息的時候也就是在getclipboarddata時
            系統(tǒng)會發(fā)個消息給我們以前的那個窗口 還記得openclipboard傳的那個m_hWnd了吧,就是給這個窗口發(fā)個消息WM_RENDERFORMAT
            然后你在這個消息響應(yīng)函數(shù)中進行把數(shù)據(jù)寫入剪貼板。
            還有一種情況就是你在想粘貼的時候  你的原先寫入的那個程序已經(jīng)關(guān)閉了,這樣的話你就帖不了了。 這樣 還有一個消息
            如果你選擇了延遲發(fā)送 然后關(guān)閉應(yīng)用程序的話,就會響應(yīng)一個WM_RENDERALLFORMATS消息 那么你在這個響應(yīng)函數(shù)中把你要寫入剪貼板得數(shù)據(jù)
            寫入 就可以避免這種情況了。
            啊 累死我了,可下寫完了。。。。




            posted @ 2011-07-31 17:11 陳曉 閱讀(2045) | 評論 (0)編輯 收藏

            快照、用進程快照,和模塊快照做個簡單的任務(wù)管理器

            得到系統(tǒng)中的進程信息
            CreateToolhelp32Snapshot 快照  
            此函數(shù)能得到系統(tǒng)中的所有進程 所有模塊 信息等
            然后用Process32First得到快照第一個節(jié)點信息(快照得到的東西相當于鏈表)
            用此可以實現(xiàn)一個windows任務(wù)管理器。
            用mFc寫的。
            //把ListCtrl的表頭做出來
            CListCtrl * m_pListCtrl=new CListCtrl;//m_pListCtrl要類的全局變量哦 
            m_pListCtrl->Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT
            ,CRect(50,50,590,350),this,IDC_LIST1);
            m_pListCtrl->SetExtendedStyle(m_pListCtrl->GetExtendedStyle()|
            LVS_EX_HEADERDRAGDROP|LVS_EX_FULLROWSELECT|
            LVS_EX_TWOCLICKACTIVATE|LVS_EX_UNDERLINECOLD);
            m_pListCtrl->InsertColumn(0,_T("進程名"),LVCFMT_LEFT,120);
            m_pListCtrl->InsertColumn(1,_T("進程ID"),LVCFMT_LEFT,70);
            m_pListCtrl->InsertColumn(2,_T("線程數(shù)量"),LVCFMT_LEFT,70);
            m_pListCtrl->InsertColumn(3,_T("路徑"),LVCFMT_LEFT,340);

            //讀取所有運行中的進程 和進程名字 加入到 ListCtrl中
               m_pListCtrl->DeleteAllItems();//先清空里面的所有item 一開始是沒有的,但是也要寫一下。
            HANDLE hSnapProcess=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//創(chuàng)建進程快照
            HANDLE hSnapModule;
            PROCESSENTRY32 pe;
            MODULEENTRY32  me;
            ZeroMemory(&me,sizeof(MODULEENTRY32));
            ZeroMemory(&pe,sizeof(PROCESSENTRY32));
            me.dwSize=sizeof(MODULEENTRY32);
            pe.dwSize=sizeof(PROCESSENTRY32);
            int pos=0;
            Process32First(hSnapProcess,&pe);//從線程快照中讀取第一個進程信息
            CString strTemp;
            do 
            {
            hSnapModule=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,pe.th32ProcessID);   //根據(jù)進程id創(chuàng)建模塊快照
            m_pListCtrl->InsertItem(pos,_T(""));     //插入一個item
            Module32First(hSnapModule,&me);        //讀取模塊中的信息  只有一個模塊。因為是根據(jù)具體進程創(chuàng)建的模塊快照
            m_pListCtrl->SetItemText(pos,0,pe.szExeFile);   //設(shè)置的進程名
            strTemp.Format(_T("%d"),pe.th32ProcessID);
            m_pListCtrl->SetItemText(pos,1,strTemp);   //進程id
            strTemp.Format(_T("%d"),pe.cntThreads);
            m_pListCtrl->SetItemText(pos,2,strTemp);    //線程數(shù)
            m_pListCtrl->SetItemText(pos,3,me.szExePath);   //進程exe路徑
            } while (Process32Next(hSnapProcess,&pe));//讀下一個進程

            在寫個關(guān)閉進程 的按鈕
            void CProcessManagerDlg::OnBnClickedButtonClose()
            {
                
            int iMark=m_pListCtrl->GetSelectionMark();
                
            if(-1!=iMark)
                {
                    CString  str
            =m_pListCtrl->GetItemText(iMark,1);
                    HANDLE hProcess
            =OpenProcess(PROCESS_ALL_ACCESS,FALSE,_wtoi(str));
                    DWORD dExitCode;
                    GetExitCodeProcess(hProcess,
            &dExitCode);
                    TerminateProcess(hProcess,dExitCode);
                    m_pListCtrl
            ->DeleteItem(iMark);
                    str.Format(_T(
            "%d"),--count);
                    GetDlgItem(IDC_STATIC_COUNT)
            ->SetWindowText(str);
                }
                
            else
                {
                    MessageBox(_T(
            "沒有選中進程"));
                }

            }

              嘿嘿,看看這個圖 還是挺好的。

               



            posted @ 2011-07-31 14:34 陳曉 閱讀(2250) | 評論 (0)編輯 收藏

            2011年7月30日 #

            多線程、事件event

            就是自己隨便做的筆記,可能對不起觀眾了。只是記錄了用的函數(shù)。具體使用方法還是看下msdn
            創(chuàng)建CreateThread 參見msdn  要記得closehandle

            mfc 創(chuàng)建線程 afxbeginthread

            創(chuàng)建事件 createevent

            等待函數(shù)WaitForSingleObject   自動事件有信號 經(jīng)過等待函數(shù)變成無信號。

            線程退出,寫在timer中 隔一段時間一檢測。可以用多等待 WaitForMultipleObjects返回WAIT_OBJECT_0時則為所有事件都為有信號狀態(tài)。


            線程同步 

            臨界區(qū)法

            定義臨界區(qū)CRITICAL_SECTION m_critical;

            InitializeCriticalSection(&m_critical) 初始化臨界區(qū)

            EnterCriticalSection(&(p->m_critical));進入

            LeaveCriticalSection(&(p->m_critical));離開

            DeleteCriticalSection(&m_critical)釋放

            事件法

            定義自動變換事件m_hEvent

            WaitForSingleObject(m_hEvent,INFINITE);

            //被保護的代碼

            SetEvent(p->m_hEvent);

            互斥對象法

            穿件互斥對象 createmutex

            等待函數(shù)WaitForSingleObject

            //被保護的代碼

            釋放互斥對象使用權(quán)ReleaseMutex

            信號量  semaphore內(nèi)核對象
            CreateSemaphore(安全性,初始話信號量,最大信號量,name)
            經(jīng)過wait函數(shù)信號量減少
            releaseSemaphore(句柄,信號增加量,【out】前個信號量)

             

             

            利用事件判斷應(yīng)用程序不能運用兩個
            createevent的最后一個參數(shù)name 寫一個“唯一的”
            然后再創(chuàng)建的這個時間 用“唯一的”這個名字  就會出錯
            用getlasterror 能得到ERROR_ALREADY_EXISTS  
            整個過程應(yīng)該在app 的init中進行

            posted @ 2011-07-30 14:32 陳曉 閱讀(687) | 評論 (0)編輯 收藏

            總結(jié)的幾個排序算法

            快速排序:
            思想 一個標記數(shù)(取數(shù)組最后一個數(shù))  左邊放比他小的所有數(shù) 右邊放比它都大的數(shù)
            這樣分成的兩個數(shù)組 在進行 尾部一個數(shù)作為標記數(shù)作為標記分割數(shù)組
            一直到分不了為止  自然就排好了續(xù)   用具體數(shù)字分析一下
            一個數(shù)組char data[9]={2,5,8,3,7,6,1,9,4};
            分開這個數(shù)組 看好了怎么把比4小的數(shù)都放到它前邊
             int biaoji=data[8];//最后一個數(shù)
             int weizhi=data[j];//這個一個位置數(shù) 一開始把它放在最前邊 j會++
             data[i];//這個是用來遍歷數(shù)組的。i會++
            for(int i=0;i<8;i++)//因為最后一個數(shù)是標記 所以只要對前8個數(shù)進行遍歷就行
            {
             if(data[i]<biaoji)
             {
               交換data[i]和weizhi
               位置的j++ 位置向后走一位(這個位置就意味著比標記小的數(shù)都放到位置的左邊邊) 
             }
            }
            在分開之后 我們要把我們的標記(也就是最后一個數(shù))和我們的位置數(shù) 換一下
            這樣就做到了這樣的事 把{2,5,8,3,7,6,1,9,4} 換成了{2,3,1,4,7,6,8,9}
            好了 上代碼 在看看代碼相信 就都會了。
            這是我用c++實現(xiàn)的代碼 哈哈寫完了感覺很爽!

            #include <iostream>
            using namespace std;
            //得到分割點 把小于最后一個數(shù)的數(shù)放在i前邊
            //iData 是數(shù)組{2,5,8,3,7,6,1,9,4} iBegin是開始的索引0  iEnd是結(jié)束的索引8
            int getCutpoint(int * iData,int iBegin,int iEnd)
            {
              int iCut=iData[iEnd];
              int i=iBegin;
             int temp;
              for(int j=iBegin;j<iEnd;j++)
              {
               //如果前面的比最后一個iCut小的話,那么讓
               //iData[i]和iData[j]換
               if (iData[j]<=iCut)
               {
                temp=iData[i];
                iData[i]=iData[j];
                iData[j]=temp; 
                i++;
              }
              }
              //交換最后一個與i處也就是cut處
              iData[iEnd]=iData[i];
              iData[i]=iCut;
             return i;//返回分割的索引
            }
            void fastSortCallBack(int * iData,int iBegin,int iEnd)
            {
             if (iBegin>=iEnd)
             {
              return;
             }
             int i=getCutpoint(iData,iBegin,iEnd);
             //回調(diào)繼續(xù)getcutpoint左部分
             fastSortCallBack(iData,iBegin,i-1);
             //回調(diào)繼續(xù)getcutpoint右部分
             fastSortCallBack(iData,i+1,iEnd);
             return ;
            }
            void fastSort(int * iData,int iLength)
            {
             fastSortCallBack(iData,0,iLength-1);
            }
            int main()
            {
             int d[9]={2,5,8,3,7,6,1,9,4};
             fastSort(d,9);
             for (int i=0;i<9;i++)
             {
              cout<<d[i]<<" ";
             }
             system("pause");
             return 0;
            }

             


            選擇排序:
            選擇排序和冒泡排序思路上有一點相似,都是先確定最小元素,再確定第二笑元素,最后確定最大元素。這個方法比較簡單,他的主要流程如下:
            1.加入一個數(shù)組A = {5,3,6,2,4,7},我們對他進行排序
            2.確定最小的元素放在A[0]位置,我們怎么確定呢,首先默認最小元素為5,他的索引為0,然后用它跟3比較,比他打,則認為最小元素為3,他的索引為1,然后用3跟6比,發(fā)現(xiàn)比他小,最小元素還是3,然后跟2比,最小元素變成了2,索引為3,然后跟4比,跟7比。當比較結(jié)束之后,最小元素也塵埃落定了。就是2,索引為3,然后我們把他放在A[0]處。為了使A[0]原有數(shù)據(jù)部丟失,我們使A[0](要放的位置) 與A[3](最小數(shù)據(jù)的位置)交換。這樣就不可以了嗎?
            3.然后我們在來找第二小元素,放在A[1],第三小元素,放在A[2]。。當尋找完畢,我們排序也就結(jié)束了。
            4.不過,在找的時候要注意其實位置,不能在找A[2]的時候,還用A[2]的數(shù)據(jù)跟已經(jīng)排好的A[0],A[1]比,一定要跟還沒有確定位置的元素比。還有一個技巧就是我們不能每次都存元素值和索引,我們只存索引就可以了,通過索引就能找到元素了。呵呵。
            5.他和冒泡的相似和區(qū)別,冒泡和他最大的區(qū)別是他發(fā)現(xiàn)比他小就交換,把小的放上面,而選擇是選擇到最小的在直接放在確定的位置。選擇也是穩(wěn)定的排序  ,這個還是很好實現(xiàn)的。

            void SelectSort(int* pnData, int nLen)
            {
                //i從[0,nLen-1)開始選擇,確定第i個元素
                for (int i = 0; i < nLen - 1; ++i)
                {
                    int nIndex = i;
                    //遍歷剩余數(shù)據(jù),選擇出當前最小的數(shù)據(jù)
                    for (int j = i + 1; j < nLen; ++j)
                    {
                        if (pnData[j] < pnData[nIndex])   
                        {
                            nIndex = j;
                        }
                    }
                    //如果當前最小數(shù)據(jù)索引不是i,也就是說排在i位置的數(shù)據(jù)在nIndex處
                    if (nIndex != i)       
                    {
                        //交換數(shù)據(jù),確定i位置的數(shù)據(jù)。
                        int nTemp = pnData[i];
                        pnData[i] = pnData[nIndex];
                        pnData[nIndex] = nTemp;
                    }
                }
            }

             


            插入排序:
            思想,從第二個元素開始向后遍歷,然后跟前面比較,如果比前邊的元素小則向前插入
            由data[1]和data[0]比較 如果data[1]<data[0]則data[0]后移一位 然后data[1]插入到data[0]位置
            當然了,在data[0]后移的時候要用temp 記錄data[1]的值
            這樣繼續(xù)下去……
            if(data[i]<(data i 前邊的元素))
            {
              data i 前邊的元素就后移
            }
            最后把data[i]放到該插入的地方去 下面獻上一點點代碼 其中主要不好弄的是在頭部
            比如{3,4,5,6,2,1} 這個2 和 1 向前插入的話2 比第一個數(shù)3還要小 所以他下一步就要去
            和索引為-1的數(shù)比較,這是不允許的。所以……如下
            void insertSort(int * pData,int iLength)
            {
             //從第二個元素開始 向前插
             int temp=pData[1];
             for (int i=1;i<iLength;)
             {
              for (int j=i-1;j>=0;j--)
              {
               //如果temp比前邊的大,則前邊的后移 最后把temp放在前面
               if (temp<pData[j])
               {
                pData[j+1]=pData[j];
                 if (j==0)
                 {
                  pData[0]=temp;
                 } 
               }
                else
                {
                 pData[j+1]=temp;
                 break;
                }
               
              }
              
              temp=pData[++i];
             }
            }

             

             

            希爾排序

            待學習。

             


            堆排序!!!!!!!!!!

             還不會呢。。

             

            冒泡排序  略……

            posted @ 2011-07-30 14:29 陳曉 閱讀(300) | 評論 (0)編輯 收藏

            僅列出標題  
            国产无套内射久久久国产| 午夜精品久久久久久| 伊人色综合久久天天人手人婷 | 国产精品对白刺激久久久| 亚洲精品午夜国产va久久| 久久精品国产亚洲AV不卡| 99久久综合国产精品二区| 99久久婷婷国产综合亚洲| 国内精品九九久久久精品| 亚洲愉拍99热成人精品热久久| 国产精品久久久久免费a∨| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 精品久久久久久国产免费了| 久久亚洲综合色一区二区三区| 久久精品www| 国产精品一区二区久久精品无码 | 国产999精品久久久久久| 成人精品一区二区久久| 久久精品国产一区二区电影| 久久九九久精品国产免费直播| 久久久久久av无码免费看大片| 一本久久免费视频| 97久久国产综合精品女不卡| 久久国产精品成人片免费| 国内精品久久国产大陆| 国产成人精品久久综合| 亚洲国产成人久久精品99| 婷婷久久久亚洲欧洲日产国码AV| 精品久久久久久久无码| 久久精品一区二区影院| 一本久道久久综合狠狠爱| 久久青草国产手机看片福利盒子 | 免费一级欧美大片久久网| 久久亚洲精品无码VA大香大香 | 亚洲狠狠婷婷综合久久久久| 国内精品久久久久久99蜜桃| 国产精品免费久久久久久久久| 久久中文字幕人妻丝袜| 四虎国产永久免费久久| 色综合久久久久综合99| 成人国内精品久久久久一区|