锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久亚洲国产精品一区二区,欧美精品1区2区3区,极品日韩avhttp://m.shnenglu.com/deane/category/13181.html 榪介愭ⅵ鎯籌紝姘鎬笉鍋滄......zh-cnFri, 17 Feb 2012 15:57:52 GMTFri, 17 Feb 2012 15:57:52 GMT60Linux 淇″彿 (杞?http://m.shnenglu.com/deane/articles/165309.html鏉庨槼鏉庨槼Fri, 10 Feb 2012 09:49:00 GMThttp://m.shnenglu.com/deane/articles/165309.htmlhttp://m.shnenglu.com/deane/comments/165309.htmlhttp://m.shnenglu.com/deane/articles/165309.html#Feedback0http://m.shnenglu.com/deane/comments/commentRss/165309.htmlhttp://m.shnenglu.com/deane/services/trackbacks/165309.html
淇″彿涓庤繘紼嬫槸鍒嗕笉寮鐨勶紝鑰屾妸淇″彿涓庤繘紼嬬殑絎旇鍒嗗紑鏉ュ啓錛屾槸鍥犱負鎴戣寰楄繖涓俊鍙峰お闅炬悶鎳備簡錛岀壒鍒槸APUE淇″彿榪欎竴绔犺繕鎶婁俊鍙風粨鍚堝巻鍙叉潵浠嬬粛寮勭殑鎴戜簯閲岄浘閲屻?nbsp;

淇″彿鏈川涓婃槸鍦ㄨ蔣浠跺眰嬈′笂瀵逛腑鏂満鍒剁殑涓縐嶆ā鎷燂紝浠栨湁鍑犵浜х敓鏂瑰紡鍜屽鐞嗘柟寮?APUE鏈変粙緇?錛屼笅闈㈠甫鐫鐤戞儜浠庡嚑涓搴﹀淇″彿榪涜浠嬬粛 


錛堜竴錛?nbsp;   绔欏湪榪涚▼鐨勮搴?/strong>

榪涚▼鍙戠幇鍜屾帴鍙椾俊鍙?/strong>

鎴戜滑鐭ラ亾錛屼俊鍙鋒槸寮傛鐨勶紝涓涓繘紼嬩笉鍙兘絳夊緟淇″彿鐨勫埌鏉ワ紝涔熶笉鐭ラ亾淇″彿浼氬埌鏉ワ紝閭d箞錛岃繘紼嬫槸濡備綍鍙戠幇鍜屾帴鍙椾俊鍙峰憿錛熷疄闄呬笂錛屼俊鍙風殑鎺ユ敹涓嶆槸鐢辯敤鎴瘋繘紼嬫潵瀹屾垚鐨勶紝鑰屾槸鐢卞唴鏍鎬唬鐞嗐傚綋涓涓繘紼婸2鍚戝彟涓涓繘紼婸1鍙戦佷俊鍙峰悗錛屽唴鏍告帴鍙楀埌淇″彿錛屽茍灝嗗叾鏀懼湪P1鐨勪俊鍙烽槦鍒楀綋涓傚綋P1鍐嶆闄峰叆鍐呮牳鎬佹椂錛屼細媯鏌ヤ俊鍙烽槦鍒楋紝騫舵牴鎹浉搴旂殑淇″彿璋冨彇鐩稿簲鐨勪俊鍙峰鐞嗗嚱鏁?/p>

Task _struct 鏄繘紼嬫帶鍒跺潡(PCB),璇﹁          http://oss.org.cn/kernel-book/ch04/4.3.htm

 

淇″彿媯嫻嬪拰鍝嶅簲鏃舵満

鍒氭墠鎴戜滑璇達紝褰揚1鍐嶆闄峰叆鍐呮牳鏃訛紝浼氭鏌ヤ俊鍙烽槦鍒椼傞偅涔堬紝P1浠涔堟椂鍊欎細鍐嶆闄峰叆鍐呮牳鍛紵闄峰叆鍐呮牳鍚庡湪浠涔堟椂鏈轟細媯嫻嬩俊鍙烽槦鍒楀憿錛?/p>

1.      褰撳墠榪涚▼鐢變簬緋葷粺璋冪敤銆佷腑鏂垨寮傚父鑰岃繘鍏ョ郴緇熺┖闂翠互鍚庯紝浠庣郴緇熺┖闂磋繑鍥炲埌鐢ㄦ埛絀洪棿鐨勫墠澶曘?/p>

2.      褰撳墠榪涚▼鍦ㄥ唴鏍鎬腑榪涘叆鐫$湢浠ュ悗鍒氳鍞ら啋鐨勬椂鍊欙紙蹇呭畾鏄湪緋葷粺璋冪敤涓級錛屾垨鑰呯敱浜庝笉鍙拷鐣ヤ俊鍙風殑瀛樺湪鑰屾彁鍓嶈繑鍥炲埌鐢ㄦ埛絀洪棿


榪涘叆淇″彿澶勭悊鍑芥暟

 

 


瀵逛簬sigprocmask 浼氳繘鍏ュ唴鏍哥┖闂淬乸ause闇瑕佷粠榪涘叆鐫$湢榪欎袱鑰呴兘絎﹀悎媯嫻嬪鐞嗕俊鍙峰嚱鏁扮殑鏉′歡錛屾墍浠ュ瓨鍦ㄥ拷鐣ヤ俊鍙風殑鎯呭喌錛岃孉PUE璁瞫igsuspend鐨勪箣鍚庣湡鏄櫐娑╅毦鎳傦紝鍏跺疄浠栦富瑕佸仛鐨勫伐浣滃氨鏄瓑寰呬竴涓腑鏂劧鍚庢墽琛岀浉搴旂殑handle澶勭悊

鎵浠ユ垜鎰熻渚嬪瓙涓殑

sigsuspend(&zeromask)錛?/p>

sigprocmask(SIG_SETMASK, &oldmask,NULL)錛?/p>

鏄笉鏄彲浠ョ洿鎺ユ浛鎹負

Sigsuspend(&oldmask)

鍥犱負嫻嬭瘯鎯呭喌闅句互鍑虹幇錛岃繖閲屽彧鏄釜浜虹悊瑙e茍鏈緱鍒伴獙璇?/p>

 

 

錛堜簩錛?nbsp; 绔欏湪淇″彿鑷韓鐨勮搴?/strong>

 

淇″彿鐢熷懡鍛ㄦ湡:

 瀵逛簬涓涓畬鏁寸殑淇″彿鐢熷懡鍛ㄦ湡(浠庝俊鍙峰彂閫佸埌鐩稿簲鐨勫鐞嗗嚱鏁版墽琛屽畬姣?鏉ヨ錛屽彲浠ュ垎涓轟笁涓噸瑕佺殑闃舵錛岃繖涓変釜闃舵鐢卞洓涓噸瑕佷簨浠舵潵鍒葷敾錛?/p>

1.淇″彿璇炵敓錛?/p>

2.淇″彿鍦ㄨ繘紼嬩腑娉ㄥ唽瀹屾瘯錛?/p>

3.淇″彿鍦ㄨ繘紼嬩腑鐨勬敞閿瀹屾瘯錛?/p>

4.淇″彿澶勭悊鍑芥暟鎵ц瀹屾瘯銆?/p>

鐩擱偦涓や釜浜嬩歡鐨勬椂闂撮棿闅旀瀯鎴愪俊鍙風敓鍛藉懆鏈熺殑涓涓樁孌點?/p>

 

    璇︾粏鎻忚堪鍚勪釜鐢熷懡鍛ㄦ湡

1.     淇″彿"璇炵敓"銆?/strong>

淇″彿鐨勮癁鐢熸寚鐨勬槸瑙﹀彂淇″彿鐨勪簨浠跺彂鐢燂紙濡傛嫻嬪埌紜歡寮傚父銆佸畾鏃跺櫒瓚呮椂浠ュ強璋冪敤淇″彿鍙戦佸嚱鏁発ill()鎴杝igqueue()絳夛級銆?nbsp;

2.      淇″彿鍦ㄧ洰鏍囪繘紼嬩腑"娉ㄥ唽"銆?/strong>

榪欓噷娉ㄥ唽瀹氫箟涓嶆槸鐢眘ignal鎴栬卻igaction瀹炵幇鐨勶紝鑰屾槸璇翠俊鍙峰彂鐢熶箣鍚庡唴鏍鎬腑鑷姩瀵逛俊鍙風殑娉ㄥ唽淇濆瓨銆?/p>

榪涚▼鐨則ask_struct緇撴瀯涓湁鍏充簬鏈繘紼嬩腑鏈喅淇″彿鐨勬暟鎹垚鍛橈細 

struct sigpending pending;

struct sigpending

{

    struct sigqueue *head, **tail;

    sigset_t signal;

};

絎竴銆佺浜屼釜鎴愬憳鍒嗗埆鎸囧悜涓涓猻igqueue綾誨瀷鐨勭粨鏋勯摼錛堢О涔嬩負"鏈喅淇″彿淇℃伅閾?錛夌殑棣栧熬錛岀涓変釜鎴愬憳鏄繘紼嬩腑鎵鏈夋湭鍐充俊鍙烽泦錛屼俊鎭摼涓殑姣忎釜sigqueue緇撴瀯浣撳埢鐢諱竴涓壒瀹氫俊鍙鋒墍鎼哄甫鐨勪俊鎭紝騫舵寚鍚戜笅涓涓猻igqueue緇撴瀯:

struct sigqueue

{

    struct sigqueue *next;

    siginfo_t info;

};

    淇″彿鍦ㄨ繘紼嬩腑娉ㄥ唽鎸囩殑灝辨槸淇″彿鍊煎姞鍏ュ埌榪涚▼鐨勬湭鍐充俊鍙烽泦涓紙sigpending緇撴瀯鐨勭浜屼釜鎴愬憳sigset_t signal錛夛紝騫朵笖淇″彿鎵鎼哄甫鐨勪俊鎭淇濈暀鍒版湭鍐充俊鍙蜂俊鎭摼鐨勬煇涓猻igqueue緇撴瀯涓傚彧瑕佷俊鍙峰湪榪涚▼鐨勬湭鍐充俊鍙烽泦涓紝琛ㄦ槑榪涚▼宸茬粡鐭ラ亾榪欎簺淇″彿鐨勫瓨鍦紝浣嗚繕娌℃潵寰楀強澶勭悊錛屾垨鑰呰淇″彿琚繘紼嬮樆濉炪?/p>

娉細 

    褰撲竴涓疄鏃朵俊鍙峰彂閫佺粰涓涓繘紼嬫椂錛屼笉綆¤淇″彿鏄惁宸茬粡鍦ㄨ繘紼嬩腑娉ㄥ唽錛岄兘浼氳鍐嶆敞鍐屼竴嬈★紝鍥犳錛屼俊鍙蜂笉浼氫涪澶憋紝鍥犳錛屽疄鏃朵俊鍙峰張鍙仛"鍙潬淇″彿"銆傝繖鎰忓懗鐫鍚屼竴涓疄鏃朵俊鍙峰彲浠ュ湪鍚屼竴涓繘紼嬬殑鏈喅淇″彿淇℃伅閾句腑鍗犳湁澶氫釜sigqueue緇撴瀯錛堣繘紼嬫瘡鏀跺埌涓涓疄鏃朵俊鍙鳳紝閮戒細涓哄畠鍒嗛厤涓涓粨鏋勬潵鐧昏璇ヤ俊鍙蜂俊鎭紝騫舵妸璇ョ粨鏋勬坊鍔犲湪鏈喅淇″彿閾懼熬錛屽嵆鎵鏈夎癁鐢熺殑瀹炴椂淇″彿閮戒細鍦ㄧ洰鏍囪繘紼嬩腑娉ㄥ唽錛夛紱

褰撲竴涓潪瀹炴椂淇″彿鍙戦佺粰涓涓繘紼嬫椂錛屽鏋滆淇″彿宸茬粡鍦ㄨ繘紼嬩腑娉ㄥ唽錛屽垯璇ヤ俊鍙峰皢琚涪寮冿紝閫犳垚淇″彿涓㈠け銆傚洜姝わ紝闈炲疄鏃朵俊鍙峰張鍙仛"涓嶅彲闈犱俊鍙?銆傝繖鎰忓懗鐫鍚屼竴涓潪瀹炴椂淇″彿鍦ㄨ繘紼嬬殑鏈喅淇″彿淇℃伅閾句腑錛岃嚦澶氬崰鏈変竴涓猻igqueue緇撴瀯銆備竴涓潪瀹炴椂淇″彿璇炵敓鍚庯紝錛?錛夈佸鏋滃彂鐜扮浉鍚岀殑淇″彿宸茬粡鍦ㄧ洰鏍囩粨鏋勪腑娉ㄥ唽錛屽垯涓嶅啀娉ㄥ唽錛屽浜庤繘紼嬫潵璇達紝鐩稿綋浜庝笉鐭ラ亾鏈淇″彿鍙戠敓錛屼俊鍙蜂涪澶憋紱錛?錛夈佸鏋滆繘紼嬬殑鏈喅淇″彿涓病鏈夌浉鍚屼俊鍙鳳紝鍒欏湪榪涚▼涓敞鍐岃嚜宸便傚湪APUE鐨勪笉鍙潬淇″彿绔犺妭涓渶瑕佹瘡嬈¢噸鏂板0鏄巗inal_hanle鍑芥暟錛岃繖涓槸璇寸殑浠ュ墠Unix緋葷粺鐨勫鐞嗭紝鐜板湪鍙潬涓嶅彲闈犲氨鏄笂闈㈡墍璇寸殑瀹炴椂涓庢敞鍐屾鏁扮殑鍖哄埆銆?/p>


3.淇″彿鍦ㄨ繘紼嬩腑鐨勬敞閿銆?/strong>

鍦ㄧ洰鏍囪繘紼嬫墽琛岃繃紼嬩腑錛屼細媯嫻嬫槸鍚︽湁淇″彿絳夊緟澶勭悊錛堟瘡嬈′粠緋葷粺絀洪棿榪斿洖鍒扮敤鎴風┖闂存椂閮藉仛榪欐牱鐨勬鏌ワ級銆傦紙“sigprocmask榪斿洖鍓嶏紝涔熻嚦灝戜細灝嗗叾涓竴涓湭鍐充笖鏈樆濉炵殑淇″彿閫掗佺粰榪涚▼”錛夊鏋滃瓨鍦ㄦ湭鍐充俊鍙風瓑寰呭鐞嗕笖璇ヤ俊鍙鋒病鏈夎榪涚▼闃誨錛屽垯鍦ㄨ繍琛岀浉搴旂殑淇″彿澶勭悊鍑芥暟鍓嶏紝榪涚▼浼氭妸淇″彿鍦ㄦ湭鍐充俊鍙烽摼涓崰鏈夌殑緇撴瀯鍗告帀銆傛槸鍚﹀皢淇″彿浠庤繘紼嬫湭鍐充俊鍙烽泦涓垹闄ゅ浜庡疄鏃朵笌闈炲疄鏃朵俊鍙鋒槸涓嶅悓鐨勩傚浜庨潪瀹炴椂淇″彿鏉ヨ錛岀敱浜庡湪鏈喅淇″彿淇℃伅閾句腑鏈澶氬彧鍗犵敤涓涓猻igqueue緇撴瀯錛屽洜姝よ緇撴瀯琚噴鏀懼悗錛屽簲璇ユ妸淇″彿鍦ㄨ繘紼嬫湭鍐充俊鍙烽泦涓垹闄わ紙淇″彿娉ㄩ攢瀹屾瘯錛夛紱鑰屽浜庡疄鏃朵俊鍙鋒潵璇達紝鍙兘鍦ㄦ湭鍐充俊鍙蜂俊鎭摼涓崰鐢ㄥ涓猻igqueue緇撴瀯錛屽洜姝ゅ簲璇ラ拡瀵瑰崰鐢╣queue緇撴瀯鐨勬暟鐩尯鍒寰咃細濡傛灉鍙崰鐢ㄤ竴涓猻igqueue緇撴瀯錛堣繘紼嬪彧鏀跺埌璇ヤ俊鍙蜂竴嬈★級錛屽垯搴旇鎶婁俊鍙峰湪榪涚▼鐨勬湭鍐充俊鍙烽泦涓垹闄わ紙淇″彿娉ㄩ攢瀹屾瘯錛夈傚惁鍒欙紝涓嶅湪榪涚▼鐨勬湭鍐充俊鍙烽泦涓垹闄よ淇″彿錛堜俊鍙鋒敞閿瀹屾瘯錛夈傝繘紼嬪湪鎵ц淇″彿鐩稿簲澶勭悊鍑芥暟涔嬪墠錛岄鍏堣鎶婁俊鍙峰湪榪涚▼涓敞閿銆?/p>


4.淇″彿鐢熷懡緇堟銆?/strong>

榪涚▼娉ㄩ攢淇″彿鍚庯紝绔嬪嵆鎵ц鐩稿簲鐨勪俊鍙峰鐞嗗嚱鏁幫紝鎵ц瀹屾瘯鍚庯紝淇″彿鐨勬湰嬈″彂閫佸榪涚▼鐨勫獎鍝嶅交搴曠粨鏉熴?nbsp;


娉細 

1錛変俊鍙鋒敞鍐屼笌鍚︼紝涓庡彂閫佷俊鍙風殑鍑芥暟錛堝kill()鎴杝igqueue()絳夛級浠ュ強淇″彿瀹夎鍑芥暟錛坰ignal()鍙妔igaction()錛夋棤鍏籌紝鍙笌淇″彿鍊兼湁鍏籌紙淇″彿鍊煎皬浜嶴IGRTMIN鐨勪俊鍙鋒渶澶氬彧娉ㄥ唽涓嬈★紝淇″彿鍊煎湪SIGRTMIN鍙奡IGRTMAX涔嬮棿鐨勪俊鍙鳳紝鍙琚繘紼嬫帴鏀跺埌灝辮娉ㄥ唽錛夈?/p>

2錛夊湪淇″彿琚敞閿鍒扮浉搴旂殑淇″彿澶勭悊鍑芥暟鎵ц瀹屾瘯榪欐鏃墮棿鍐咃紝濡傛灉榪涚▼鍙堟敹鍒板悓涓淇″彿澶氭錛屽垯瀵瑰疄鏃朵俊鍙鋒潵璇達紝姣忎竴嬈¢兘浼氬湪榪涚▼涓敞鍐岋紱鑰屽浜庨潪瀹炴椂淇″彿鏉ヨ錛屾棤璁烘敹鍒板灝戞淇″彿錛岄兘浼氳涓哄彧鏀跺埌涓涓俊鍙鳳紝鍙湪榪涚▼涓敞鍐屼竴嬈°?/p>

 

錛堜笁錛?nbsp; 榪涚▼鍜屼俊鍙蜂袱鑰呯殑瑙掑害鏉ョ湅

瀹為檯鎵ц淇″彿鐨勫鐞嗗姩浣滅О涓轟俊鍙烽掕揪錛圖elivery錛夛紝淇″彿浠庝駭鐢熷埌閫掕揪涔嬮棿鐨勭姸鎬侊紝縐頒負淇″彿鏈喅錛圥ending錛夈傝繘紼嬪彲浠ラ夋嫨闃誨錛圔lock錛夋煇涓俊鍙楓傝闃誨鐨勪俊鍙蜂駭鐢熸椂灝嗕繚鎸佸湪鏈喅鐘舵侊紝鐩村埌榪涚▼瑙i櫎瀵規淇″彿鐨勯樆濉烇紝鎵嶆墽琛岄掕揪鐨勫姩浣溿傛敞鎰忥紝闃誨鍜屽拷鐣ユ槸涓嶅悓鐨勶紝鍙淇″彿琚樆濉炲氨涓嶄細閫掕揪錛岃屽拷鐣ユ槸鍦ㄩ掕揪涔嬪悗鍙夌殑涓縐嶅鐞嗗姩浣溿備俊鍙峰湪鍐呮牳涓殑琛ㄧず鍙互鐪嬩綔鏄繖鏍風殑錛?/p>

淇″彿鍦ㄥ唴鏍鎬腑鐨勮〃紺虹ず鎰忓浘

 姣忎釜淇″彿閮芥湁涓や釜鏍囧織浣嶅垎鍒〃紺洪樆濉炲拰鏈喅錛岃繕鏈変竴涓嚱鏁版寚閽堣〃紺哄鐞嗗姩浣溿備俊鍙蜂駭鐢熸椂錛屽唴鏍稿湪榪涚▼鎺у埗鍧椾腑璁劇疆璇ヤ俊鍙風殑鏈喅鏍囧織錛岀洿鍒頒俊鍙烽掕揪鎵嶆竻闄よ鏍囧織銆傚湪涓婂浘鐨勪緥瀛愪腑錛?/p>

1.      SIGHUP淇″彿鏈樆濉炰篃鏈駭鐢熻繃錛屽綋瀹冮掕揪鏃舵墽琛岄粯璁ゅ鐞嗗姩浣溿?/p>

2.      SIGINT淇″彿浜х敓榪囷紝浣嗘鍦ㄨ闃誨錛屾墍浠ユ殏鏃朵笉鑳介掕揪銆傝櫧鐒跺畠鐨勫鐞嗗姩浣滄槸蹇界暐錛屼絾鍦ㄦ病鏈夎В闄ら樆濉炰箣鍓嶄笉鑳藉拷鐣ヨ繖涓俊鍙鳳紝鍥犱負榪涚▼浠嶆湁鏈轟細鏀瑰彉澶勭悊鍔ㄤ綔涔嬪悗鍐嶈В闄ら樆濉炪?/p>

3.      SIGQUIT淇″彿鏈駭鐢熻繃錛屼竴鏃︿駭鐢烻IGQUIT淇″彿灝嗚闃誨錛屽畠鐨勫鐞嗗姩浣滄槸鐢ㄦ埛鑷畾涔夊嚱鏁皊ighandler銆?/p>

 




鏉庨槼 2012-02-10 17:49 鍙戣〃璇勮
]]>
銆愯漿銆慖O - 鍚屾錛屽紓姝ワ紝闃誨錛岄潪闃誨 錛堜骸緹婅ˉ鐗㈢瘒錛?http://m.shnenglu.com/deane/articles/165219.html鏉庨槼鏉庨槼Thu, 09 Feb 2012 05:52:00 GMThttp://m.shnenglu.com/deane/articles/165219.htmlhttp://m.shnenglu.com/deane/comments/165219.htmlhttp://m.shnenglu.com/deane/articles/165219.html#Feedback0http://m.shnenglu.com/deane/comments/commentRss/165219.htmlhttp://m.shnenglu.com/deane/services/trackbacks/165219.html鏈枃璁ㄨ鐨勮儗鏅槸Linux鐜涓嬬殑network IO銆?br />鏈枃鏈閲嶈鐨勫弬鑰冩枃鐚槸Richard Stevens鐨?#8220;UNIX® Network Programming Volume 1, Third Edition: The Sockets Networking ”錛?.2鑺?#8220;I/O Models ”錛孲tevens鍦ㄨ繖鑺備腑璇︾粏璇存槑浜嗗悇縐岻O鐨勭壒鐐瑰拰鍖哄埆錛屽鏋滆嫳鏂囧濂界殑璇濓紝鎺ㄨ崘鐩存帴闃呰銆係tevens鐨勬枃椋庢槸鏈夊悕鐨勬繁鍏ユ祬鍑猴紝鎵浠ヤ笉鐢ㄦ媴蹇冪湅涓嶆噦銆傛湰鏂囦腑鐨勬祦紼嬪浘涔熸槸鎴彇鑷弬鑰冩枃鐚?

Stevens鍦ㄦ枃绔犱腑涓鍏辨瘮杈冧簡浜旂IO Model錛?br />    blocking IO
    nonblocking IO
    IO multiplexing
    signal driven IO
    asynchronous IO
鐢變簬signal driven IO鍦ㄥ疄闄呬腑騫朵笉甯哥敤錛屾墍浠ユ垜榪欏彧鎻愬強鍓╀笅鐨勫洓縐岻O Model銆?br />
鍐嶈涓涓婭O鍙戠敓鏃舵秹鍙婄殑瀵硅薄鍜屾楠ゃ?br />瀵逛簬涓涓猲etwork IO (榪欓噷鎴戜滑浠ead涓句緥)錛屽畠浼氭秹鍙婂埌涓や釜緋葷粺瀵硅薄錛屼竴涓槸璋冪敤榪欎釜IO鐨刾rocess (or thread)錛屽彟涓涓氨鏄郴緇熷唴鏍?kernel)銆傚綋涓涓猺ead鎿嶄綔鍙戠敓鏃訛紝瀹冧細緇忓巻涓や釜闃舵錛?br />1 絳夊緟鏁版嵁鍑嗗 (Waiting for the data to be ready)
2 灝嗘暟鎹粠鍐呮牳鎷瘋礉鍒拌繘紼嬩腑 (Copying the data from the kernel to the process)
璁頒綇榪欎袱鐐瑰緢閲嶈錛屽洜涓鴻繖浜汭O Model鐨勫尯鍒氨鏄湪涓や釜闃舵涓婂悇鏈変笉鍚岀殑鎯呭喌銆?/p>

blocking IO
鍦╨inux涓紝榛樿鎯呭喌涓嬫墍鏈夌殑socket閮芥槸blocking錛屼竴涓吀鍨嬬殑璇繪搷浣滄祦紼嬪ぇ姒傛槸榪欐牱錛?/p>


褰撶敤鎴瘋繘紼嬭皟鐢ㄤ簡recvfrom榪欎釜緋葷粺璋冪敤錛宬ernel灝卞紑濮嬩簡IO鐨勭涓涓樁孌碉細鍑嗗鏁版嵁銆傚浜巒etwork io鏉ヨ錛屽緢澶氭椂鍊欐暟鎹湪涓寮濮嬭繕娌℃湁鍒拌揪錛堟瘮濡傦紝榪樻病鏈夋敹鍒頒竴涓畬鏁寸殑UDP鍖咃級錛岃繖涓椂鍊檏ernel灝辮絳夊緟瓚沖鐨勬暟鎹埌鏉ャ傝屽湪鐢ㄦ埛榪涚▼榪欒竟錛屾暣涓繘紼嬩細琚樆濉炪傚綋kernel涓鐩寸瓑鍒版暟鎹噯澶囧ソ浜嗭紝瀹冨氨浼氬皢鏁版嵁浠巏ernel涓嫹璐濆埌鐢ㄦ埛鍐呭瓨錛岀劧鍚巏ernel榪斿洖緇撴灉錛岀敤鎴瘋繘紼嬫墠瑙i櫎block鐨勭姸鎬侊紝閲嶆柊榪愯璧鋒潵銆?br />鎵浠ワ紝blocking IO鐨勭壒鐐瑰氨鏄湪IO鎵ц鐨勪袱涓樁孌甸兘琚玝lock浜嗐?/p>

non-blocking IO

linux涓嬶紝鍙互閫氳繃璁劇疆socket浣垮叾鍙樹負non-blocking銆傚綋瀵逛竴涓猲on-blocking socket鎵ц璇繪搷浣滄椂錛屾祦紼嬫槸榪欎釜鏍峰瓙錛?/p>


浠庡浘涓彲浠ョ湅鍑猴紝褰撶敤鎴瘋繘紼嬪彂鍑簉ead鎿嶄綔鏃訛紝濡傛灉kernel涓殑鏁版嵁榪樻病鏈夊噯澶囧ソ錛岄偅涔堝畠騫朵笉浼歜lock鐢ㄦ埛榪涚▼錛岃屾槸绔嬪埢榪斿洖涓涓猠rror銆備粠鐢ㄦ埛榪涚▼瑙掑害璁?錛屽畠鍙戣搗涓涓猺ead鎿嶄綔鍚庯紝騫朵笉闇瑕佺瓑寰咃紝鑰屾槸椹笂灝卞緱鍒頒簡涓涓粨鏋溿傜敤鎴瘋繘紼嬪垽鏂粨鏋滄槸涓涓猠rror鏃訛紝瀹冨氨鐭ラ亾鏁版嵁榪樻病鏈夊噯澶囧ソ錛屼簬鏄畠鍙互鍐嶆鍙戦乺ead鎿嶄綔銆備竴鏃ernel涓殑鏁版嵁鍑嗗濂戒簡錛屽茍涓斿張鍐嶆鏀跺埌浜嗙敤鎴瘋繘紼嬬殑system call錛岄偅涔堝畠椹笂灝卞皢鏁版嵁鎷瘋礉鍒頒簡鐢ㄦ埛鍐呭瓨錛岀劧鍚庤繑鍥炪?br />鎵浠ワ紝鐢ㄦ埛榪涚▼鍏跺疄鏄渶瑕佷笉鏂殑涓誨姩璇㈤棶kernel鏁版嵁濂戒簡娌℃湁銆?/p>

IO multiplexing

IO multiplexing榪欎釜璇嶅彲鑳芥湁鐐歸檶鐢燂紝浣嗘槸濡傛灉鎴戣select錛宔poll錛屽ぇ姒傚氨閮借兘鏄庣櫧浜嗐傛湁浜涘湴鏂逛篃縐拌繖縐岻O鏂瑰紡涓篹vent driven IO銆傛垜浠兘鐭ラ亾錛宻elect/epoll鐨勫ソ澶勫氨鍦ㄤ簬鍗曚釜process灝卞彲浠ュ悓鏃跺鐞嗗涓綉緇滆繛鎺ョ殑IO銆傚畠鐨勫熀鏈師鐞嗗氨鏄痵elect/epoll榪欎釜function浼氫笉鏂殑杞鎵璐熻矗鐨勬墍鏈塻ocket錛屽綋鏌愪釜socket鏈夋暟鎹埌杈句簡錛屽氨閫氱煡鐢ㄦ埛榪涚▼銆傚畠鐨勬祦紼嬪鍥撅細


褰撶敤鎴瘋繘紼嬭皟鐢ㄤ簡select錛岄偅涔堟暣涓繘紼嬩細琚玝lock錛岃屽悓鏃訛紝kernel浼?#8220;鐩戣”鎵鏈塻elect璐熻矗鐨剆ocket錛屽綋浠諱綍涓涓猻ocket涓殑鏁版嵁鍑嗗濂戒簡錛宻elect灝變細榪斿洖銆傝繖涓椂鍊欑敤鎴瘋繘紼嬪啀璋冪敤read鎿嶄綔錛屽皢鏁版嵁浠巏ernel鎷瘋礉鍒扮敤鎴瘋繘紼嬨?br />榪欎釜鍥懼拰blocking IO鐨勫浘鍏跺疄騫舵病鏈夊お澶х殑涓嶅悓錛屼簨瀹炰笂錛岃繕鏇村樊涓浜涖傚洜涓鴻繖閲岄渶瑕佷嬌鐢ㄤ袱涓猻ystem call (select 鍜?recvfrom)錛岃宐locking IO鍙皟鐢ㄤ簡涓涓猻ystem call (recvfrom)銆備絾鏄紝鐢╯elect鐨勪紭鍔垮湪浜庡畠鍙互鍚屾椂澶勭悊澶氫釜connection銆傦紙澶氳涓鍙ャ傛墍浠ワ紝濡傛灉澶勭悊鐨勮繛鎺ユ暟涓嶆槸寰堥珮鐨勮瘽錛屼嬌鐢╯elect/epoll鐨剋eb server涓嶄竴瀹氭瘮浣跨敤multi-threading + blocking IO鐨剋eb server鎬ц兘鏇村ソ錛屽彲鑳藉歡榪熻繕鏇村ぇ銆俿elect/epoll鐨勪紭鍔垮茍涓嶆槸瀵逛簬鍗曚釜榪炴帴鑳藉鐞嗗緱鏇村揩錛岃屾槸鍦ㄤ簬鑳藉鐞嗘洿澶氱殑榪炴帴銆傦級
鍦↖O multiplexing Model涓紝瀹為檯涓紝瀵逛簬姣忎竴涓猻ocket錛屼竴鑸兘璁劇疆鎴愪負non-blocking錛屼絾鏄紝濡備笂鍥炬墍紺猴紝鏁翠釜鐢ㄦ埛鐨刾rocess鍏跺疄鏄竴鐩磋block鐨勩傚彧涓嶈繃process鏄select榪欎釜鍑芥暟block錛岃屼笉鏄socket IO緇檅lock銆?/p>

Asynchronous I/O

linux涓嬬殑asynchronous IO鍏跺疄鐢ㄥ緱寰堝皯銆傚厛鐪嬩竴涓嬪畠鐨勬祦紼嬶細


鐢ㄦ埛榪涚▼鍙戣搗read鎿嶄綔涔嬪悗錛岀珛鍒誨氨鍙互寮濮嬪幓鍋氬叾瀹冪殑浜嬨傝屽彟涓鏂歸潰錛屼粠kernel鐨勮搴︼紝褰撳畠鍙楀埌涓涓猘synchronous read涔嬪悗錛岄鍏堝畠浼氱珛鍒昏繑鍥烇紝鎵浠ヤ笉浼氬鐢ㄦ埛榪涚▼浜х敓浠諱綍block銆傜劧鍚庯紝kernel浼氱瓑寰呮暟鎹噯澶囧畬鎴愶紝鐒跺悗灝嗘暟鎹嫹璐濆埌鐢ㄦ埛鍐呭瓨錛屽綋榪欎竴鍒囬兘瀹屾垚涔嬪悗錛宬ernel浼氱粰鐢ㄦ埛榪涚▼鍙戦佷竴涓猻ignal錛屽憡璇夊畠read鎿嶄綔瀹屾垚浜嗐?/p>

鍒扮洰鍓嶄負姝紝宸茬粡灝嗗洓涓狪O Model閮戒粙緇嶅畬浜嗐傜幇鍦ㄥ洖榪囧ご鏉ュ洖絳旀渶鍒濈殑閭e嚑涓棶棰橈細blocking鍜宯on-blocking鐨勫尯鍒湪鍝紝synchronous IO鍜宎synchronous IO鐨勫尯鍒湪鍝?br />鍏堝洖絳旀渶綆鍗曠殑榪欎釜錛歜locking vs non-blocking銆傚墠闈㈢殑浠嬬粛涓叾瀹炲凡緇忓緢鏄庣‘鐨勮鏄庝簡榪欎袱鑰呯殑鍖哄埆銆傝皟鐢╞locking IO浼氫竴鐩碽lock浣忓搴旂殑榪涚▼鐩村埌鎿嶄綔瀹屾垚錛岃宯on-blocking IO鍦╧ernel榪樺噯澶囨暟鎹殑鎯呭喌涓嬩細绔嬪埢榪斿洖銆?/p>

鍦ㄨ鏄巗ynchronous IO鍜宎synchronous IO鐨勫尯鍒箣鍓嶏紝闇瑕佸厛緇欏嚭涓よ呯殑瀹氫箟銆係tevens緇欏嚭鐨勫畾涔夛紙鍏跺疄鏄疨OSIX鐨勫畾涔夛級鏄繖鏍峰瓙鐨勶細
    A synchronous I/O operation causes the requesting process to be blocked until that I/O operation completes;
    An asynchronous I/O operation does not cause the requesting process to be blocked;

涓よ呯殑鍖哄埆灝卞湪浜巗ynchronous IO鍋?#8221;IO operation”鐨勬椂鍊欎細灝唒rocess闃誨銆傛寜鐓ц繖涓畾涔夛紝涔嬪墠鎵榪扮殑blocking IO錛宯on-blocking IO錛孖O multiplexing閮藉睘浜巗ynchronous IO銆傛湁浜哄彲鑳戒細璇達紝non-blocking IO騫舵病鏈夎block鍟娿傝繖閲屾湁涓潪甯?#8220;鐙$尵”鐨勫湴鏂癸紝瀹氫箟涓墍鎸囩殑”IO operation”鏄寚鐪熷疄鐨処O鎿嶄綔錛屽氨鏄緥瀛愪腑鐨剅ecvfrom榪欎釜system call銆俷on-blocking IO鍦ㄦ墽琛宺ecvfrom榪欎釜system call鐨勬椂鍊欙紝濡傛灉kernel鐨勬暟鎹病鏈夊噯澶囧ソ錛岃繖鏃跺欎笉浼歜lock榪涚▼銆備絾鏄紝褰搆ernel涓暟鎹噯澶囧ソ鐨勬椂鍊欙紝recvfrom浼氬皢鏁版嵁浠巏ernel鎷瘋礉鍒扮敤鎴峰唴瀛樹腑錛岃繖涓椂鍊欒繘紼嬫槸琚玝lock浜嗭紝鍦ㄨ繖孌墊椂闂村唴錛岃繘紼嬫槸琚玝lock鐨勩傝宎synchronous IO鍒欎笉涓鏍鳳紝褰撹繘紼嬪彂璧稩O 鎿嶄綔涔嬪悗錛屽氨鐩存帴榪斿洖鍐嶄篃涓嶇悊鐫簡錛岀洿鍒発ernel鍙戦佷竴涓俊鍙鳳紝鍛婅瘔榪涚▼璇碔O瀹屾垚銆傚湪榪欐暣涓繃紼嬩腑錛岃繘紼嬪畬鍏ㄦ病鏈夎block銆?/p>

鍚勪釜IO Model鐨勬瘮杈冨鍥炬墍紺猴細


緇忚繃涓婇潰鐨勪粙緇嶏紝浼氬彂鐜皀on-blocking IO鍜宎synchronous IO鐨勫尯鍒繕鏄緢鏄庢樉鐨勩傚湪non-blocking IO涓紝铏界劧榪涚▼澶ч儴鍒嗘椂闂撮兘涓嶄細琚玝lock錛屼絾鏄畠浠嶇劧瑕佹眰榪涚▼鍘諱富鍔ㄧ殑check錛屽茍涓斿綋鏁版嵁鍑嗗瀹屾垚浠ュ悗錛屼篃闇瑕佽繘紼嬩富鍔ㄧ殑鍐嶆璋冪敤recvfrom鏉ュ皢鏁版嵁鎷瘋礉鍒扮敤鎴峰唴瀛樸傝宎synchronous IO鍒欏畬鍏ㄤ笉鍚屻傚畠灝卞儚鏄敤鎴瘋繘紼嬪皢鏁翠釜IO鎿嶄綔浜ょ粰浜嗕粬浜猴紙kernel錛夊畬鎴愶紝鐒跺悗浠栦漢鍋氬畬鍚庡彂淇″彿閫氱煡銆傚湪姝ゆ湡闂達紝鐢ㄦ埛榪涚▼涓嶉渶瑕佸幓媯鏌O鎿嶄綔鐨勭姸鎬侊紝涔熶笉闇瑕佷富鍔ㄧ殑鍘繪嫹璐濇暟鎹?br />
鏈鍚庯紝鍐嶄婦鍑犱釜涓嶆槸寰堟伆褰撶殑渚嬪瓙鏉ヨ鏄庤繖鍥涗釜IO Model:
鏈堿錛孊錛孋錛孌鍥涗釜浜哄湪閽撻奔錛?br />A鐢ㄧ殑鏄渶鑰佸紡鐨勯奔绔匡紝鎵浠ュ憿錛屽緱涓鐩村畧鐫錛岀瓑鍒伴奔涓婇挬浜嗗啀鎷夋潌錛?br />B鐨勯奔绔挎湁涓姛鑳斤紝鑳藉鏄劇ず鏄惁鏈夐奔涓婇挬錛屾墍浠ュ憿錛孊灝卞拰鏃佽竟鐨凪M鑱婂ぉ錛岄殧浼氬啀鐪嬬湅鏈夋病鏈夐奔涓婇挬錛屾湁鐨勮瘽灝辮繀閫熸媺鏉嗭紱
C鐢ㄧ殑楸肩鍜孊宸笉澶氾紝浣嗕粬鎯充簡涓涓ソ鍔炴硶錛屽氨鏄悓鏃舵斁濂藉嚑鏍歸奔绔匡紝鐒跺悗瀹堝湪鏃佽竟錛屼竴鏃︽湁鏄劇ず璇撮奔涓婇挬浜嗭紝瀹冨氨灝嗗搴旂殑楸肩鎷夎搗鏉ワ紱
D鏄釜鏈夐挶浜猴紝騫茶剢闆囦簡涓涓漢甯粬閽撻奔錛屼竴鏃﹂偅涓漢鎶婇奔閽撲笂鏉ヤ簡錛屽氨緇橠鍙戜釜鐭俊銆?/span>

鍘熷笘鍦板潃錛?a>http://blog.csdn.net/historyasamirror/archive/2010/07/31/5778378.aspx



鏉庨槼 2012-02-09 13:52 鍙戣〃璇勮
]]>
娣卞叆浜嗚Вepoll (杞?http://m.shnenglu.com/deane/articles/165218.html鏉庨槼鏉庨槼Thu, 09 Feb 2012 05:48:00 GMThttp://m.shnenglu.com/deane/articles/165218.htmlhttp://m.shnenglu.com/deane/comments/165218.htmlhttp://m.shnenglu.com/deane/articles/165218.html#Feedback0http://m.shnenglu.com/deane/comments/commentRss/165218.htmlhttp://m.shnenglu.com/deane/services/trackbacks/165218.html

涓銆?浠嬬粛
Epoll 鏄竴縐嶉珮鏁堢殑綆$悊socket鐨勬ā鍨嬶紝鐩稿浜巗elect鍜宲oll鏉ヨ鍏鋒湁鏇撮珮鐨勬晥鐜囧拰鏄撶敤鎬с備紶緇熺殑select浠ュ強poll鐨勬晥鐜囦細鍥犱負 socket鏁伴噺鐨勭嚎褰㈤掑鑰屽鑷村憟浜屾涔冭嚦涓夋鏂圭殑涓嬮檷錛岃宔poll鐨勬ц兘涓嶄細闅弒ocket鏁伴噺澧炲姞鑰屼笅闄嶃傛爣鍑嗙殑linux-2.4.20鍐呮牳涓嶆敮鎸乪poll錛岄渶瑕佹墦patch銆傛湰鏂囦富瑕佷粠linux-2.4.32鍜宭inux-2.6.10涓や釜鍐呮牳鐗堟湰浠嬬粛epoll銆?br />浜屻?Epoll鐨勪嬌鐢?br />epoll鐢ㄥ埌鐨勬墍鏈夊嚱鏁伴兘鏄湪澶存枃浠秙ys/epoll.h涓0鏄庣殑錛屼笅闈㈢畝瑕佽鏄庢墍鐢ㄥ埌鐨勬暟鎹粨鏋勫拰鍑芥暟錛?br />鎵鐢ㄥ埌鐨勬暟鎹粨鏋?br />typedef union epoll_data {
                void ptr;
                int fd;
                __uint32_t u32;
                __uint64_t u64;
      } epoll_data_t;

      struct epoll_event {
                __uint32_t events;    / Epoll events /
                epoll_data_t data;    / User data variable /
      };
緇撴瀯浣揺poll_event 琚敤浜庢敞鍐屾墍鎰熷叴瓚g殑浜嬩歡鍜屽洖浼犳墍鍙戠敓寰呭鐞嗙殑浜嬩歡錛屽叾涓璭poll_data 鑱斿悎浣撶敤鏉ヤ繚瀛樿Е鍙戜簨浠剁殑鏌愪釜鏂囦歡鎻忚堪絎︾浉鍏崇殑鏁版嵁錛屼緥濡備竴涓猚lient榪炴帴鍒版湇鍔″櫒錛屾湇鍔″櫒閫氳繃璋冪敤accept鍑芥暟鍙互寰楀埌浜庤繖涓猚lient瀵瑰簲鐨剆ocket鏂囦歡鎻忚堪絎︼紝鍙互鎶婅繖鏂囦歡鎻忚堪絎﹁祴緇檈poll_data鐨刦d瀛楁浠ヤ究鍚庨潰鐨勮鍐欐搷浣滃湪榪欎釜鏂囦歡鎻忚堪絎︿笂榪涜銆俥poll_event 緇撴瀯浣撶殑events瀛楁鏄〃紺烘劅鍏磋叮鐨勪簨浠跺拰琚Е鍙戠殑浜嬩歡鍙兘鐨勫彇鍊間負錛欵POLLIN 錛氳〃紺哄搴旂殑鏂囦歡鎻忚堪絎﹀彲浠ヨ錛?br />EPOLLOUT錛氳〃紺哄搴旂殑鏂囦歡鎻忚堪絎﹀彲浠ュ啓錛?br />EPOLLPRI錛氳〃紺哄搴旂殑鏂囦歡鎻忚堪絎︽湁绱фョ殑鏁版嵁鍙
EPOLLERR錛氳〃紺哄搴旂殑鏂囦歡鎻忚堪絎﹀彂鐢熼敊璇紱
EPOLLHUP錛氳〃紺哄搴旂殑鏂囦歡鎻忚堪絎﹁鎸傛柇錛?br />EPOLLET錛氳〃紺哄搴旂殑鏂囦歡鎻忚堪絎﹁瀹氫負edge妯″紡錛?br />鎵鐢ㄥ埌鐨勫嚱鏁幫細
1銆乪poll_create鍑芥暟
    鍑芥暟澹版槑錛歩nt epoll_create(int size)
    璇ュ嚱鏁扮敓鎴愪竴涓猠poll涓撶敤鐨勬枃浠舵弿榪扮錛屽叾涓殑鍙傛暟鏄寚瀹氱敓鎴愭弿榪扮鐨勬渶澶ц寖鍥淬傚湪linux-2.4.32鍐呮牳涓牴鎹畇ize澶у皬鍒濆鍖栧搱甯岃〃鐨勫ぇ灝忥紝鍦╨inux2.6.10鍐呮牳涓鍙傛暟鏃犵敤錛屼嬌鐢ㄧ孩榛戞爲綆$悊鎵鏈夌殑鏂囦歡鎻忚堪絎︼紝鑰屼笉鏄痟ash銆?br />2銆乪poll_ctl鍑芥暟
    鍑芥暟澹版槑錛歩nt epoll_ctl(int epfd, int op, int fd, struct epoll_event event)
    璇ュ嚱鏁扮敤浜庢帶鍒舵煇涓枃浠舵弿榪扮涓婄殑浜嬩歡錛屽彲浠ユ敞鍐屼簨浠訛紝淇敼浜嬩歡錛屽垹闄や簨浠躲?br />    鍙傛暟錛歟pfd錛氱敱 epoll_create 鐢熸垚鐨別poll涓撶敤鐨勬枃浠舵弿榪扮錛?br />                op錛氳榪涜鐨勬搷浣滀緥濡傛敞鍐屼簨浠訛紝鍙兘鐨勫彇鍊?br />EPOLL_CTL_ADD 娉ㄥ唽銆?br />EPOLL_CTL_MOD 淇敼銆?br />EPOLL_CTL_DEL 鍒犻櫎
fd錛氬叧鑱旂殑鏂囦歡鎻忚堪絎︼紱
event錛氭寚鍚慹poll_event鐨勬寚閽堬紱
濡傛灉璋冪敤鎴愬姛榪斿洖0,涓嶆垚鍔熻繑鍥?1
3銆乪poll_wait鍑芥暟
鍑芥暟澹版槑:int epoll_wait(int epfd,struct epoll_event   events,int maxevents,int timeout)
璇ュ嚱鏁扮敤浜庤疆璇/O浜嬩歡鐨勫彂鐢燂紱
鍙傛暟錛?br />epfd:鐢眅poll_create 鐢熸垚鐨別poll涓撶敤鐨勬枃浠舵弿榪扮錛?br />epoll_event:鐢ㄤ簬鍥炰紶浠e鐞嗕簨浠剁殑鏁扮粍錛?br />maxevents:姣忔鑳藉鐞嗙殑浜嬩歡鏁幫紱
timeout:絳夊緟I/O浜嬩歡鍙戠敓鐨勮秴鏃跺鹼紙ms錛夛紱-1姘鎬笉瓚呮椂錛岀洿鍒版湁浜嬩歡浜х敓鎵嶈Е鍙戯紝0绔嬪嵆榪斿洖銆?br />榪斿洖鍙戠敓浜嬩歡鏁般?1鏈夐敊璇?br />
涓句竴涓畝鍗曠殑渚嬪瓙錛?br />
C/C++ codeint main()
{
    //澹版槑epoll_event緇撴瀯浣撶殑鍙橀噺,ev鐢ㄤ簬娉ㄥ唽浜嬩歡,鏁扮粍鐢ㄤ簬鍥炰紶瑕佸鐞嗙殑浜嬩歡
    struct epoll_event ev,events[20];

    epfd=epoll_create(10000); //鍒涘緩epoll鍙ユ焺
   
    listenfd = socket(AF_INET, SOCK_STREAM, 0);
    //鎶妔ocket璁劇疆涓洪潪闃誨鏂瑰紡
    setnonblocking(listenfd);
   
    bzero(&serveraddr, sizeof(serveraddr));
    serveraddr.sin_family = AF_INET;
    serveraddr.sin_addr.s_addr = INADDR_ANY;
    serveraddr.sin_port=htons(SERV_PORT);
    bind(listenfd,(struct sockaddr )&serveraddr, sizeof(serveraddr));
    listen(listenfd, 255);

    //璁劇疆涓庤澶勭悊鐨勪簨浠剁浉鍏崇殑鏂囦歡鎻忚堪絎?br />    ev.data.fd=listenfd;
    //璁劇疆瑕佸鐞嗙殑浜嬩歡綾誨瀷
    ev.events=EPOLLIN;
    //娉ㄥ唽epoll浜嬩歡
    epoll_ctl(epfd,EPOLL_CTL_ADD,listenfd,&ev);

    for ( ; ; )
    {
      //絳夊緟epoll浜嬩歡鐨勫彂鐢?br />      nfds=epoll_wait(epfd,events,20,1000);
      //澶勭悊鎵鍙戠敓鐨勬墍鏈変簨浠?br />      for(i=0;i<nfds;++i)
      {
         if(events
.data.fd==listenfd)
         {
                connfd = accept(listenfd,(struct sockaddr )&clientaddr, &clilen);
                if(connfd<0)
                {
                  perror("connfd<0");
                }
                setnonblocking(connfd);
                //璁劇疆鐢ㄤ簬璇繪搷浣滅殑鏂囦歡鎻忚堪絎?br />                ev.data.fd=connfd;
                //璁劇疆鐢ㄤ簬娉ㄦ祴鐨勮鎿嶄綔浜嬩歡
                ev.events=EPOLLIN|EPOLLET;
                //娉ㄥ唽event
                epoll_ctl(epfd,EPOLL_CTL_ADD,connfd,&ev);
         }
         else if(events
.events&EPOLLIN)
         {
                read_socket(events
.data.fd);
                ev.data.fd=events
.data.fd;
                ev.events=EPOLLIN|EPOLLOUT|EPOLLET;
                epoll_ctl(epfd,EPOLL_CTL_MOD,sockfd,&ev);
         }
         else if(events
.events&EPOLLOUT)
         {
                write_socket(events
.data.fd);
                ev.data.fd=events
.data.fd;
                ev.events=EPOLLIN|EPOLLET; //ET妯″紡
            epoll_ctl(epfd,EPOLL_CTL_MOD,sockfd,&ev);
         }
         else
         {
                perror("other event");
         }
      }
    }
}


Epoll鐨凟T妯″紡涓嶭T妯″紡
ET錛圗dge Triggered錛変笌LT錛圠evel Triggered錛夌殑涓昏鍖哄埆鍙互浠庝笅闈㈢殑渚嬪瓙鐪嬪嚭
eg錛?br />1錛?鏍囩ず綆¢亾璇昏呯殑鏂囦歡鍙ユ焺娉ㄥ唽鍒癳poll涓紱
2錛?綆¢亾鍐欒呭悜綆¢亾涓啓鍏?KB鐨勬暟鎹紱
3錛?璋冪敤epoll_wait鍙互鑾峰緱綆¢亾璇昏呬負宸插氨緇殑鏂囦歡鍙ユ焺錛?br />4錛?綆¢亾璇昏呰鍙?KB鐨勬暟鎹?br />5錛?涓嬈poll_wait璋冪敤瀹屾垚
濡傛灉鏄疎T妯″紡錛岀閬撲腑鍓╀綑鐨?KB琚寕璧鳳紝鍐嶆璋冪敤epoll_wait錛屽緱涓嶅埌綆¢亾璇昏呯殑鏂囦歡鍙ユ焺錛岄櫎闈炴湁鏂扮殑鏁版嵁鍐欏叆綆¢亾銆傚鏋滄槸LT妯″紡錛屽彧瑕佺閬撲腑鏈夋暟鎹彲璇伙紝姣忔璋冪敤epoll_wait閮戒細瑙﹀彂銆?br />
鍙︿竴鐐瑰尯鍒氨鏄涓篍T妯″紡鐨勬枃浠跺彞鏌勫繀欏繪槸闈為樆濉炵殑銆?br />涓夈?Epoll鐨勫疄鐜?br />Epoll 鐨勬簮鏂囦歡鍦?usr/src/linux/fs/eventpoll.c錛屽湪module_init鏃舵敞鍐屼竴涓枃浠剁郴緇?eventpoll_fs_type錛屽璇ユ枃浠剁郴緇熸彁渚涗袱縐嶆搷浣減oll鍜宺elease錛屾墍浠poll_create榪斿洖鐨勬枃浠跺彞鏌勫彲浠ヨpoll銆?select鎴栬呰鍏跺畠epoll epoll_wait銆傚epoll鐨勬搷浣滀富瑕侀氳繃涓変釜緋葷粺璋冪敤瀹炵幇錛?br />1錛?sys_epoll_create
2錛?sys_epoll_ctl
3錛?sys_epoll_wait
涓嬮潰緇撳悎婧愮爜璁茶堪榪欎笁涓郴緇熻皟鐢ㄣ?br />1.1 long sys_epoll_create (int size)
璇ョ郴緇熻皟鐢ㄤ富瑕佸垎閰嶆枃浠跺彞鏌勩乮node浠ュ強file緇撴瀯銆傚湪linux-2.4.32鍐呮牳涓紝浣跨敤hash淇濆瓨鎵鏈夋敞鍐屽埌璇poll鐨勬枃浠跺彞鏌勶紝鍦ㄨ緋葷粺璋冪敤涓牴鎹畇ize澶у皬鍒嗛厤hash鐨勫ぇ灝忋傚叿浣撲負涓嶅皬浜巗ize錛屼絾灝忎簬2size鐨?鐨勬煇嬈℃柟銆傛渶灝忎負2鐨?嬈℃柟錛?12錛夛紝鏈澶т負2鐨?7嬈℃柟錛?28 x 1024錛夈傚湪linux-2.6.10鍐呮牳涓紝浣跨敤綰㈤粦鏍戜繚瀛樻墍鏈夋敞鍐屽埌璇poll鐨勬枃浠跺彞鏌勶紝size鍙傛暟鏈嬌鐢ㄣ?br />1.2 long sys_epoll_ctl(int epfd, int op, int fd, struct epoll_event event)
1錛?娉ㄥ唽鍙ユ焺 op = EPOLL_CTL_ADD
娉ㄥ唽榪囩▼涓昏鍖呮嫭錛?br />A錛庡皢fd鎻掑叆鍒癶ash錛堟垨rbtree錛変腑錛屽鏋滃師鏉ュ凡緇忓瓨鍦ㄨ繑鍥?EEXIST錛?br />B錛庣粰fd娉ㄥ唽涓涓洖璋冨嚱鏁幫紝璇ュ嚱鏁頒細鍦╢d鏈変簨浠舵椂璋冪敤錛屽湪璇ュ嚱鏁頒腑灝唂d鍔犲叆鍒癳poll鐨勫氨緇槦鍒椾腑銆?br />C錛庢鏌d褰撳墠鏄惁宸茬粡鏈夋湡鏈涚殑浜嬩歡浜х敓銆傚鏋滄湁錛屽皢鍏跺姞鍏ュ埌epoll鐨勫氨緇槦鍒椾腑錛屽敜閱抏poll_wait銆?br />
2錛?淇敼浜嬩歡 op = EPOLL_CTL_MOD
淇敼浜嬩歡鍙槸灝嗘柊鐨勪簨浠舵浛鎹㈡棫鐨勪簨浠訛紝鐒跺悗媯鏌d鏄惁鏈夋湡鏈涚殑浜嬩歡銆傚鏋滄湁錛屽皢鍏跺姞鍏ュ埌epoll鐨勫氨緇槦鍒椾腑錛屽敜閱抏poll_wait銆?br />
3錛?鍒犻櫎鍙ユ焺 op = EPOLL_CTL_DEL
灝唂d浠巋ash錛坮btree錛変腑娓呴櫎銆?br />1.3 long sys_epoll_wait(int epfd, struct epoll_event events, int maxevents,int timeout)
濡傛灉epoll鐨勫氨緇槦鍒椾負絀猴紝騫朵笖timeout闈?錛屾寕璧峰綋鍓嶈繘紼嬶紝寮曡搗CPU璋冨害銆?br />濡傛灉epoll鐨勫氨緇槦鍒椾笉絀猴紝閬嶅巻灝辯華闃熷垪銆傚闃熷垪涓殑姣忎竴涓妭鐐癸紝鑾峰彇璇ユ枃浠跺凡瑙﹀彂鐨勪簨浠訛紝鍒ゆ柇鍏朵腑鏄惁鏈夋垜浠湡寰呯殑浜嬩歡錛屽鏋滄湁錛屽皢鍏跺搴旂殑epoll_event緇撴瀯copy鍒扮敤鎴積vents銆?br />
revents = epi->file->f_op->poll(epi->file, NULL);
epi->revents = revents & epi->event.events;
if (epi->revents) {
……
copy_to_user;
……
}
闇瑕佹敞鎰忕殑鏄紝鍦↙T妯″紡涓嬶紝鎶婄鍚堟潯浠剁殑浜嬩歡copy鍒扮敤鎴風┖闂村悗錛岃繕浼氭妸瀵瑰簲鐨勬枃浠墮噸鏂版寕鎺ュ埌灝辯華闃熷垪銆傛墍浠ュ湪LT妯″紡涓嬶紝濡傛灉涓嬈poll_wait鏌愪釜socket娌℃湁read/write瀹屾墍鏈夋暟鎹紝涓嬫epoll_wait榪樹細榪斿洖璇ocket鍙ユ焺銆?br />鍥涖?浣跨敤epoll鐨勬敞鎰忎簨欏?br />1. ET妯″紡姣擫T妯″紡楂樻晥錛屼絾姣旇緝闅炬帶鍒躲?br />2. 濡傛灉鏌愪釜鍙ユ焺鏈熷緟鐨勪簨浠朵笉鍙橈紝涓嶉渶瑕丒POLL_CTL_MOD錛屼絾姣忔璇誨啓鍚庡皢璇ュ彞鏌刴odify涓嬈℃湁鍔╀簬鎻愰珮紼沖畾鎬э紝鐗瑰埆鍦‥T妯″紡銆?br />3. socket鍏抽棴鍚庢渶濂藉皢璇ュ彞鏌勪粠epoll涓璬elete錛圗POLL_CTL_DEL錛夛紝铏界劧epoll鑷韓鏈夊鐞嗭紝浣嗕細浣縠poll鐨刪ash鐨勮妭鐐規暟澧炲錛屽獎鍝嶆悳绱ash鐨勯熷害銆?br />  
Q錛氱綉緇滄湇鍔″櫒鐨勭摱棰堝湪鍝紵
A錛欼O鏁堢巼銆?br />
鍦ㄥぇ瀹惰嫤鑻︾殑涓哄湪綰夸漢鏁扮殑澧為暱鑰屽鑷寸殑緋葷粺璧勬簮鍚冪揣涓婄殑闂姝e湪鍙戞剚鐨勬椂鍊欙紝Linux 2.6鍐呮牳涓彁渚涚殑System Epoll涓烘垜浠彁渚涗簡涓濂楀畬緹庣殑瑙e喅鏂規銆備紶緇熺殑select浠ュ強poll鐨勬晥鐜囦細鍥犱負鍦ㄧ嚎浜烘暟鐨勭嚎褰㈤掑鑰屽鑷村憟浜屾涔冭嚦涓夋鏂圭殑涓嬮檷錛岃繖浜涚洿鎺ュ鑷翠簡緗戠粶鏈嶅姟鍣ㄥ彲浠ユ敮鎸佺殑浜烘暟鏈変簡涓瘮杈冩槑鏄劇殑闄愬埗銆?br />
鑷粠Linux鎻愪緵浜?dev/epoll鐨勮澶囦互鍙婂悗鏉?.6鍐呮牳涓/dev /epoll璁懼鐨勮闂殑灝佽錛圫ystem Epoll錛変箣鍚庯紝榪欑鐜拌薄寰楀埌浜嗗ぇ澶х殑緙撹В錛屽鏋滆鍑犱釜鏈堝墠錛屽ぇ瀹惰繕瀵筫poll涓嶇啛鎮夛紝閭d箞鐜板湪鏉ヨ鐨勮瘽錛宔poll鐨勫簲鐢ㄥ凡緇忓緱鍒頒簡澶ц寖鍥寸殑鏅強銆?br />
閭d箞絀剁珶濡備綍鏉ヤ嬌鐢╡poll鍛紵鍏跺疄闈炲父綆鍗曘?br />閫氳繃鍦ㄥ寘鍚竴涓ご鏂囦歡#include 浠ュ強鍑犱釜綆鍗曠殑API灝嗗彲浠ュぇ澶х殑鎻愰珮浣犵殑緗戠粶鏈嶅姟鍣ㄧ殑鏀寔浜烘暟銆?br />
棣栧厛閫氳繃create_epoll(int maxfds)鏉ュ垱寤轟竴涓猠poll鐨勫彞鏌勶紝鍏朵腑maxfds涓轟綘epoll鎵鏀寔鐨勬渶澶у彞鏌勬暟銆傝繖涓嚱鏁頒細榪斿洖涓涓柊鐨別poll鍙ユ焺錛屼箣鍚庣殑鎵鏈夋搷浣滃皢閫氳繃榪欎釜鍙ユ焺鏉ヨ繘琛屾搷浣溿傚湪鐢ㄥ畬涔嬪悗錛岃寰楃敤close()鏉ュ叧闂繖涓垱寤哄嚭鏉ョ殑epoll鍙ユ焺銆?br />
涔嬪悗鍦ㄤ綘鐨勭綉緇滀富寰幆閲岄潰錛屾瘡涓甯х殑璋冪敤epoll_wait(int epfd, epoll_event events, int max events, int timeout)鏉ユ煡璇㈡墍鏈夌殑緗戠粶鎺ュ彛錛岀湅鍝竴涓彲浠ヨ錛屽摢涓涓彲浠ュ啓浜嗐傚熀鏈殑璇硶涓猴細
nfds = epoll_wait(kdpfd, events, maxevents, -1);
鍏朵腑kdpfd涓虹敤epoll_create鍒涘緩涔嬪悗鐨勫彞鏌勶紝events鏄竴涓猠poll_event鐨勬寚閽堬紝褰揺poll_wait榪欎釜鍑芥暟鎿嶄綔鎴愬姛涔嬪悗錛宔poll_events閲岄潰灝嗗偍瀛樻墍鏈夌殑璇誨啓浜嬩歡銆俶ax_events鏄綋鍓嶉渶瑕佺洃鍚殑鎵鏈塻ocket鍙ユ焺鏁般傛渶鍚庝竴涓猼imeout鏄?epoll_wait鐨勮秴鏃訛紝涓?鐨勬椂鍊欒〃紺洪┈涓婅繑鍥烇紝涓?1鐨勬椂鍊欒〃紺轟竴鐩寸瓑涓嬪幓錛岀洿鍒版湁浜嬩歡鑼冨洿錛屼負浠繪剰姝f暣鏁扮殑鏃跺欒〃紺虹瓑榪欎箞闀跨殑鏃墮棿錛屽鏋滀竴鐩存病鏈変簨浠訛紝鍒欒寖鍥淬備竴鑸鏋滅綉緇滀富寰幆鏄崟鐙殑綰跨▼鐨勮瘽錛屽彲浠ョ敤-1鏉ョ瓑錛岃繖鏍峰彲浠ヤ繚璇佷竴浜涙晥鐜囷紝濡傛灉鏄拰涓婚昏緫鍦ㄥ悓涓涓嚎紼嬬殑璇濓紝鍒欏彲浠ョ敤0鏉ヤ繚璇佷富寰幆鐨勬晥鐜囥?br />
epoll_wait鑼冨洿涔嬪悗搴旇鏄竴涓驚鐜紝閬嶅埄鎵鏈夌殑浜嬩歡錛?br />
C/C++ codefor(n = 0; n < nfds; ++n) {
            if(events[n].data.fd == listener) { //濡傛灉鏄富socket鐨勪簨浠剁殑璇濓紝鍒欒〃紺烘湁鏂拌繛鎺ヨ繘鍏ヤ簡錛岃繘琛屾柊榪炴帴鐨勫鐞嗐?br />                   client = accept(listener, (struct sockaddr ) &local,
                                 &addrlen);
                   if(client < 0){
                     perror("accept");
                     continue;
                   }
                   setnonblocking(client); // 灝嗘柊榪炴帴緗簬闈為樆濉炴ā寮?br />                   ev.events = EPOLLIN | EPOLLET; // 騫朵笖灝嗘柊榪炴帴涔熷姞鍏POLL鐨勭洃鍚槦鍒椼?br />娉ㄦ剰錛岃繖閲岀殑鍙傛暟EPOLLIN | EPOLLET騫舵病鏈夎緗鍐檚ocket鐨勭洃鍚紝濡傛灉鏈夊啓鎿嶄綔鐨勮瘽錛岃繖涓椂鍊檈poll鏄笉浼氳繑鍥炰簨浠剁殑錛屽鏋滆瀵瑰啓鎿嶄綔涔熺洃鍚殑璇濓紝搴旇鏄疎POLLIN | EPOLLOUT | EPOLLET
                   ev.data.fd = client;
                   if (epoll_ctl(kdpfd, EPOLL_CTL_ADD, client, &ev) < 0) {
//   璁劇疆濂絜vent涔嬪悗錛屽皢榪欎釜鏂扮殑event閫氳繃epoll_ctl鍔犲叆鍒癳poll鐨勭洃鍚槦鍒楅噷闈紝榪欓噷鐢‥POLL_CTL_ADD鏉ュ姞涓涓柊鐨?epoll浜嬩歡錛岄氳繃EPOLL_CTL_DEL鏉ュ噺灝戜竴涓猠poll浜嬩歡錛岄氳繃EPOLL_CTL_MOD鏉ユ敼鍙樹竴涓簨浠剁殑鐩戝惉鏂瑰紡銆?br />                     fprintf(stderr, "epoll set insertion error: fd=d0,
                               client);
                     return -1;
                   }
            }
            else // 濡傛灉涓嶆槸涓籹ocket鐨勪簨浠剁殑璇濓紝鍒欎唬琛ㄦ槸涓涓敤鎴穝ocket鐨勪簨浠訛紝鍒欐潵澶勭悊榪欎釜鐢ㄦ埛socket鐨勪簨鎯咃紝姣斿璇磖ead(fd,xxx)涔嬬被鐨勶紝鎴栬呬竴浜涘叾浠栫殑澶勭悊銆?br />                   do_use_fd(events[n].data.fd);
}



瀵癸紝epoll鐨勬搷浣滃氨榪欎箞綆鍗曪紝鎬誨叡涓嶈繃4涓狝PI錛歟poll_create, epoll_ctl, epoll_wait鍜宑lose銆?/font>

 

 

Linux 2.6鍐呮牳涓彁楂樼綉緇淚/O鎬ц兘鐨勬柊鏂規硶

1銆佷負浠涔坰elect鏄惤鍚庣殑錛?
棣栧厛錛屽湪Linux鍐呮牳涓紝select鎵鐢ㄥ埌鐨凢D_SET鏄湁闄愮殑錛屽嵆鍐呮牳涓湁涓弬鏁癬_FD_SETSIZE瀹氫箟浜嗘瘡涓狥D_SET鐨勫彞鏌勪釜鏁幫紝鍦ㄦ垜鐢ㄧ殑2.6.15-25-386鍐呮牳涓紝璇ュ兼槸1024錛屾悳绱㈠唴鏍告簮浠g爜寰楀埌錛?
include/linux/posix_types.h:#define __FD_SETSIZE 1024
涔熷氨鏄錛屽鏋滄兂瑕佸悓鏃舵嫻?025涓彞鏌勭殑鍙鐘舵佹槸涓嶅彲鑳界敤select瀹炵幇鐨勩傛垨鑰呭悓鏃舵嫻?025涓彞鏌勭殑鍙啓鐘舵佷篃鏄笉鍙兘鐨勩?
鍏舵錛屽唴鏍鎬腑瀹炵幇select鏄敤杞鏂規硶錛屽嵆姣忔媯嫻嬮兘浼氶亶鍘嗘墍鏈塅D_SET涓殑鍙ユ焺錛屾樉鐒訛紝select鍑芥暟鎵ц鏃墮棿涓嶧D_SET涓殑鍙ユ焺涓暟鏈変竴涓瘮渚嬪叧緋伙紝鍗硈elect瑕佹嫻嬬殑鍙ユ焺鏁拌秺澶氬氨浼氳秺璐規椂銆?
褰撶劧錛屽湪鍓嶆枃涓垜騫舵病鏈夋彁鍙妏oll鏂規硶錛屼簨瀹炰笂鐢╯elect鐨勬湅鍙嬩竴瀹氫篃璇曡繃poll錛屾垜涓漢瑙夊緱select鍜宲oll澶у悓灝忓紓錛屼釜浜哄亸濂戒簬鐢╯elect鑰屽凡銆?
2銆?.6鍐呮牳涓彁楂業/O鎬ц兘鐨勬柊鏂規硶epoll
epoll鏄粈涔堬紵鎸夌収man鎵嬪唽鐨勮娉曪細鏄負澶勭悊澶ф壒閲忓彞鏌勮屼綔浜嗘敼榪涚殑poll銆傝浣跨敤epoll鍙渶瑕佽繖涓変釜緋葷粺璋冪敤錛歟poll_create(2)錛?epoll_ctl(2)錛?epoll_wait(2)銆?
褰撶劧錛岃繖涓嶆槸2.6鍐呮牳鎵嶆湁鐨勶紝瀹冩槸鍦?.5.44鍐呮牳涓寮曡繘鐨?epoll(4) is a new API introduced in Linux kernel 2.5.44)

epoll鐨勪紭鐐?
<1>鏀寔涓涓繘紼嬫墦寮澶ф暟鐩殑socket鎻忚堪絎?FD)
select 鏈涓嶈兘蹇嶅彈鐨勬槸涓涓繘紼嬫墍鎵撳紑鐨凢D鏄湁涓瀹氶檺鍒剁殑錛岀敱FD_SETSIZE璁劇疆錛岄粯璁ゅ兼槸2048銆傚浜庨偅浜涢渶瑕佹敮鎸佺殑涓婁竾榪炴帴鏁扮洰鐨処M鏈嶅姟鍣ㄦ潵璇存樉鐒跺お灝戜簡銆傝繖鏃跺欎綘涓鏄彲浠ラ夋嫨淇敼榪欎釜瀹忕劧鍚庨噸鏂扮紪璇戝唴鏍革紝涓嶈繃璧勬枡涔熷悓鏃舵寚鍑鴻繖鏍蜂細甯︽潵緗戠粶鏁堢巼鐨勪笅闄嶏紝浜屾槸鍙互閫夋嫨澶氳繘紼嬬殑瑙e喅鏂規(浼犵粺鐨?Apache鏂規)錛屼笉榪囪櫧鐒秎inux涓婇潰鍒涘緩榪涚▼鐨勪唬浠鋒瘮杈冨皬錛屼絾浠嶆棫鏄笉鍙拷瑙嗙殑錛屽姞涓婅繘紼嬮棿鏁版嵁鍚屾榪滄瘮涓嶄笂綰跨▼闂村悓姝ョ殑楂樻晥錛屾墍浠ヤ篃涓嶆槸涓縐嶅畬緹庣殑鏂規銆備笉榪?epoll鍒欐病鏈夎繖涓檺鍒訛紝瀹冩墍鏀寔鐨凢D涓婇檺鏄渶澶у彲浠ユ墦寮鏂囦歡鐨勬暟鐩紝榪欎釜鏁板瓧涓鑸繙澶т簬2048,涓句釜渚嬪瓙,鍦?GB鍐呭瓨鐨勬満鍣ㄤ笂澶х害鏄?0涓囧乏鍙籌紝鍏蜂綋鏁扮洰鍙互cat /proc/sys/fs/file-max瀵熺湅,涓鑸潵璇磋繖涓暟鐩拰緋葷粺鍐呭瓨鍏崇郴寰堝ぇ銆?

<2>IO鏁堢巼涓嶉殢FD鏁扮洰澧炲姞鑰岀嚎鎬т笅闄?
浼犵粺鐨剆elect/poll鍙︿竴涓嚧鍛藉急鐐瑰氨鏄綋浣犳嫢鏈変竴涓緢澶х殑socket闆嗗悎錛屼笉榪囩敱浜庣綉緇滃歡鏃訛紝浠諱竴鏃墮棿鍙湁閮ㄥ垎鐨剆ocket鏄?媧昏穬"鐨勶紝浣嗘槸select/poll姣忔璋冪敤閮戒細綰挎ф壂鎻忓叏閮ㄧ殑闆嗗悎錛屽鑷存晥鐜囧憟鐜扮嚎鎬т笅闄嶃備絾鏄痚poll涓嶅瓨鍦ㄨ繖涓棶棰橈紝瀹冨彧浼氬"媧昏穬"鐨剆ocket榪涜鎿嶄綔---榪欐槸鍥犱負鍦ㄥ唴鏍稿疄鐜頒腑epoll鏄牴鎹瘡涓猣d涓婇潰鐨刢allback鍑芥暟瀹炵幇鐨勩傞偅涔堬紝鍙湁"媧昏穬"鐨剆ocket鎵嶄細涓誨姩鐨勫幓璋冪敤 callback鍑芥暟錛屽叾浠杋dle鐘舵乻ocket鍒欎笉浼氾紝鍦ㄨ繖鐐逛笂錛宔poll瀹炵幇浜嗕竴涓?浼?AIO錛屽洜涓鴻繖鏃跺欐帹鍔ㄥ姏鍦╫s鍐呮牳銆傚湪涓浜?benchmark涓紝濡傛灉鎵鏈夌殑socket鍩烘湰涓婇兘鏄椿璺冪殑---姣斿涓涓珮閫烲AN鐜錛宔poll騫朵笉姣攕elect/poll鏈変粈涔堟晥鐜囷紝鐩稿弽錛屽鏋滆繃澶氫嬌鐢╡poll_ctl,鏁堢巼鐩告瘮榪樻湁紼嶅井鐨勪笅闄嶃備絾鏄竴鏃︿嬌鐢╥dle connections妯℃嫙WAN鐜,epoll鐨勬晥鐜囧氨榪滃湪select/poll涔嬩笂浜嗐?
<3>浣跨敤mmap鍔犻熷唴鏍鎬笌鐢ㄦ埛絀洪棿鐨勬秷鎭紶閫掋?br />榪欑偣瀹為檯涓婃秹鍙婂埌epoll鐨勫叿浣撳疄鐜頒簡銆傛棤璁烘槸select,poll榪樻槸epoll閮介渶瑕佸唴鏍告妸FD娑堟伅閫氱煡緇欑敤鎴風┖闂達紝濡備綍閬垮厤涓嶅繀瑕佺殑鍐呭瓨鎷瘋礉灝卞緢閲嶈錛屽湪榪欑偣涓婏紝epoll鏄氳繃鍐呮牳浜庣敤鎴風┖闂磎map鍚屼竴鍧楀唴瀛樺疄鐜扮殑銆傝屽鏋滀綘鎯蟲垜涓鏍蜂粠2.5鍐呮牳灝卞叧娉╡poll鐨勮瘽錛屼竴瀹氫笉浼氬繕璁版墜宸?mmap榪欎竴姝ョ殑銆?
<4>鍐呮牳寰皟
榪欎竴鐐瑰叾瀹炰笉綆梕poll鐨勪紭鐐逛簡錛岃屾槸鏁翠釜linux騫沖彴鐨勪紭鐐廣備篃璁鎬綘鍙互鎬鐤憀inux騫沖彴錛屼絾鏄綘鏃犳硶鍥為伩linux騫沖彴璧嬩簣浣犲井璋冨唴鏍哥殑鑳藉姏銆傛瘮濡傦紝鍐呮牳TCP/IP鍗忚鏍堜嬌鐢ㄥ唴瀛樻睜綆$悊sk_buff緇撴瀯錛岄偅涔堝彲浠ュ湪榪愯鏃舵湡鍔ㄦ佽皟鏁磋繖涓唴瀛榩ool(skb_head_pool)鐨勫ぇ灝?--- 閫氳繃echo XXXX>/proc/sys/net/core/hot_list_length瀹屾垚銆傚啀姣斿listen鍑芥暟鐨勭2涓弬鏁?TCP瀹屾垚3嬈℃彙鎵嬬殑鏁版嵁鍖呴槦鍒楅暱搴?錛屼篃鍙互鏍規嵁浣犲鉤鍙板唴瀛樺ぇ灝忓姩鎬佽皟鏁淬傛洿鐢氳嚦鍦ㄤ竴涓暟鎹寘闈㈡暟鐩法澶т絾鍚屾椂姣忎釜鏁版嵁鍖呮湰韜ぇ灝忓嵈寰堝皬鐨勭壒孌婄郴緇熶笂灝濊瘯鏈鏂扮殑NAPI緗戝崱椹卞姩鏋舵瀯銆?
epoll鐨勪嬌鐢?
浠や漢楂樺叴鐨勬槸錛?.6鍐呮牳鐨別poll姣斿叾2.5寮鍙戠増鏈殑/dev/epoll綆媧佷簡璁稿錛屾墍浠ワ紝澶ч儴鍒嗘儏鍐典笅錛屽己澶х殑涓滆タ寰寰鏄畝鍗曠殑銆傚敮涓鏈夌偣楹葷儲鏄痚poll鏈?縐嶅伐浣滄柟寮?LT鍜孍T銆?br />LT(level triggered)鏄己鐪佺殑宸ヤ綔鏂瑰紡錛屽茍涓斿悓鏃舵敮鎸乥lock鍜宯o-block socket.鍦ㄨ繖縐嶅仛娉曚腑錛屽唴鏍稿憡璇変綘涓涓枃浠舵弿榪扮鏄惁灝辯華浜嗭紝鐒跺悗浣犲彲浠ュ榪欎釜灝辯華鐨刦d榪涜IO鎿嶄綔銆傚鏋滀綘涓嶄綔浠諱綍鎿嶄綔錛屽唴鏍歌繕鏄細緇х畫閫氱煡浣犵殑錛屾墍浠ワ紝榪欑妯″紡緙栫▼鍑洪敊璇彲鑳芥ц灝忎竴鐐廣備紶緇熺殑select/poll閮芥槸榪欑妯″瀷鐨勪唬琛紟
ET (edge-triggered)鏄珮閫熷伐浣滄柟寮忥紝鍙敮鎸乶o-block socket銆傚湪榪欑妯″紡涓嬶紝褰撴弿榪扮浠庢湭灝辯華鍙樹負灝辯華鏃訛紝鍐呮牳閫氳繃epoll鍛婅瘔浣犮傜劧鍚庡畠浼氬亣璁句綘鐭ラ亾鏂囦歡鎻忚堪絎﹀凡緇忓氨緇紝騫朵笖涓嶄細鍐嶄負閭d釜鏂囦歡鎻忚堪絎﹀彂閫佹洿澶氱殑灝辯華閫氱煡錛岀洿鍒頒綘鍋氫簡鏌愪簺鎿嶄綔瀵艱嚧閭d釜鏂囦歡鎻忚堪絎︿笉鍐嶄負灝辯華鐘舵佷簡(姣斿錛屼綘鍦ㄥ彂閫侊紝鎺ユ敹鎴栬呮帴鏀惰姹傦紝鎴栬呭彂閫佹帴鏀剁殑鏁版嵁灝戜簬涓瀹氶噺鏃跺鑷翠簡涓涓狤WOULDBLOCK 閿欒錛夈備絾鏄娉ㄦ剰錛屽鏋滀竴鐩翠笉瀵硅繖涓猣d浣淚O鎿嶄綔(浠庤屽鑷村畠鍐嶆鍙樻垚鏈氨緇?錛屽唴鏍鎬笉浼氬彂閫佹洿澶氱殑閫氱煡(only once),涓嶈繃鍦═CP鍗忚涓紝ET妯″紡鐨勫姞閫熸晥鐢ㄤ粛闇瑕佹洿澶氱殑benchmark紜銆?
epoll鍙湁epoll_create,epoll_ctl,epoll_wait 3涓郴緇熻皟鐢紝鍏蜂綋鐢ㄦ硶璇峰弬鑰僪ttp://www.xmailserver.org/linux-patches/nio-improve.html 錛?
鍦╤ttp://www.kegel.com/rn/涔熸湁涓涓畬鏁寸殑渚嬪瓙錛屽ぇ瀹朵竴鐪嬪氨鐭ラ亾濡備綍浣跨敤浜?
Leader/follower妯″紡綰跨▼pool瀹炵幇錛屼互鍙婂拰epoll鐨勯厤鍚?/p>

鍦↙inux涓婂紑鍙戠綉緇滄湇鍔″櫒鐨勪竴浜涚浉鍏崇粏鑺?poll涓巈poll
銆銆闅忕潃2.6鍐呮牳瀵筫poll鐨勫畬鍏ㄦ敮鎸侊紝緗戠粶涓婂緢澶氱殑鏂囩珷鍜岀ず渚嬩唬鐮侀兘鎻愪緵浜嗚繖鏍蜂竴涓俊鎭細浣跨敤epoll浠f浛浼犵粺鐨?poll鑳界粰緗戠粶鏈嶅姟搴旂敤甯︽潵鎬ц兘涓婄殑鎻愬崌銆備絾澶у鏂囩珷閲屽叧浜庢ц兘鎻愬崌鐨勫師鍥犺В閲婄殑杈冨皯錛岃繖閲屾垜灝嗚瘯鍒嗘瀽涓涓嬪唴鏍革紙2.6.21.1錛変唬鐮佷腑poll涓?epoll鐨勫伐浣滃師鐞嗭紝鐒跺悗鍐嶉氳繃涓浜涙祴璇曟暟鎹潵瀵規瘮鍏蜂綋鏁堟灉銆?POLL錛?

鍏堣poll錛宲oll鎴杝elect涓哄ぇ閮ㄥ垎Unix/Linux紼嬪簭鍛樻墍鐔熸倝錛岃繖淇╀釜涓滆タ鍘熺悊綾諱技錛屾ц兘涓婁篃涓嶅瓨鍦ㄦ槑鏄懼樊寮傦紝浣唖elect瀵規墍鐩戞帶鐨勬枃浠舵弿榪扮鏁伴噺鏈夐檺鍒訛紝鎵浠ヨ繖閲岄夌敤poll鍋氳鏄庛?br />poll鏄竴涓郴緇熻皟鐢紝鍏跺唴鏍稿叆鍙e嚱鏁頒負sys_poll錛宻ys_poll鍑犱箮涓嶅仛浠諱綍澶勭悊鐩存帴璋冪敤do_sys_poll錛宒o_sys_poll鐨勬墽琛岃繃紼嬪彲浠ュ垎涓轟笁涓儴鍒嗭細
1錛屽皢鐢ㄦ埛浼犲叆鐨刾ollfd鏁扮粍鎷瘋礉鍒板唴鏍哥┖闂達紝鍥犱負鎷瘋礉鎿嶄綔鍜屾暟緇勯暱搴︾浉鍏籌紝鏃墮棿涓婅繖鏄竴涓狾錛坣錛夋搷浣滐紝榪欎竴姝ョ殑浠g爜鍦╠o_sys_poll涓寘鎷粠鍑芥暟寮濮嬪埌璋冪敤do_poll鍓嶇殑閮ㄥ垎銆?
2錛屾煡璇㈡瘡涓枃浠舵弿榪扮瀵瑰簲璁懼鐨勭姸鎬侊紝濡傛灉璇ヨ澶囧皻鏈氨緇紝鍒欏湪璇ヨ澶囩殑絳夊緟闃熷垪涓姞鍏ヤ竴欏瑰茍緇х畫鏌ヨ涓嬩竴璁懼鐨勭姸鎬併傛煡璇㈠畬鎵鏈夎澶囧悗濡傛灉娌℃湁涓涓澶囧氨緇紝榪欐椂鍒欓渶瑕佹寕璧峰綋鍓嶈繘紼嬬瓑寰咃紝鐩村埌璁懼灝辯華鎴栬呰秴鏃訛紝鎸傝搗鎿嶄綔鏄氳繃璋冪敤schedule_timeout鎵ц鐨勩傝澶囧氨緇悗榪涚▼琚氱煡緇х畫榪愯錛岃繖鏃跺啀嬈¢亶鍘嗘墍鏈夎澶囷紝浠ユ煡鎵懼氨緇澶囥傝繖涓姝ュ洜涓轟袱嬈¢亶鍘嗘墍鏈夎澶囷紝鏃墮棿澶嶆潅搴︿篃鏄疧錛坣錛夛紝榪欓噷闈笉鍖呮嫭絳夊緟鏃墮棿銆傜浉鍏充唬鐮佸湪do_poll鍑芥暟涓?
3錛屽皢鑾峰緱鐨勬暟鎹紶閫佸埌鐢ㄦ埛絀洪棿騫舵墽琛岄噴鏀懼唴瀛樺拰鍓ョ絳夊緟闃熷垪絳夊杽鍚庡伐浣滐紝鍚戠敤鎴風┖闂存嫹璐濇暟鎹笌鍓ョ絳夊緟闃熷垪絳夋搷浣滅殑鐨勬椂闂村鏉傚害鍚屾牱鏄疧錛坣錛夛紝鍏蜂綋浠g爜鍖呮嫭do_sys_poll鍑芥暟涓皟鐢╠o_poll鍚庡埌緇撴潫鐨勯儴鍒嗐?
EPOLL錛?
鎺ヤ笅鏉ュ垎鏋恊poll錛屼笌poll/select涓嶅悓錛宔poll涓嶅啀鏄竴涓崟鐙殑緋葷粺璋冪敤錛岃屾槸鐢眅poll_create/epoll_ctl/epoll_wait涓変釜緋葷粺璋冪敤緇勬垚錛屽悗闈㈠皢浼氱湅鍒拌繖鏍峰仛鐨勫ソ澶勩?br />鍏堟潵鐪媠ys_epoll_create(epoll_create瀵瑰簲鐨勫唴鏍稿嚱鏁幫級錛岃繖涓嚱鏁頒富瑕佹槸鍋氫竴浜涘噯澶囧伐浣滐紝姣斿鍒涘緩鏁版嵁緇撴瀯錛屽垵濮嬪寲鏁版嵁騫舵渶緇堣繑鍥炰竴涓枃浠舵弿榪扮錛堣〃紺烘柊鍒涘緩鐨勮櫄鎷焑poll鏂囦歡錛夛紝榪欎釜鎿嶄綔鍙互璁や負鏄竴涓浐瀹氭椂闂寸殑鎿嶄綔銆?
epoll鏄仛涓轟竴涓櫄鎷熸枃浠剁郴緇熸潵瀹炵幇鐨勶紝榪欐牱鍋氳嚦灝戞湁浠ヤ笅涓や釜濂藉錛?br />1錛屽彲浠ュ湪鍐呮牳閲岀淮鎶や竴浜涗俊鎭紝榪欎簺淇℃伅鍦ㄥ嬈poll_wait闂存槸淇濇寔鐨勶紝姣斿鎵鏈夊彈鐩戞帶鐨勬枃浠舵弿榪扮銆?
2錛?epoll鏈韓涔熷彲浠ヨpoll/epoll;
鍏蜂綋epoll鐨勮櫄鎷熸枃浠剁郴緇熺殑瀹炵幇鍜屾ц兘鍒嗘瀽鏃犲叧錛屼笉鍐嶈禈榪般?
鍦╯ys_epoll_create涓繕鑳界湅鍒頒竴涓粏鑺傦紝灝辨槸epoll_create鐨勫弬鏁皊ize鍦ㄧ幇闃舵鏄病鏈夋剰涔夌殑錛屽彧瑕佸ぇ浜庨浂灝辮銆?

鎺ョ潃鏄痵ys_epoll_ctl(epoll_ctl瀵瑰簲鐨勫唴鏍稿嚱鏁幫級錛岄渶瑕佹槑紜殑鏄瘡嬈¤皟鐢╯ys_epoll_ctl鍙鐞嗕竴涓枃浠舵弿榪扮錛岃繖閲屼富瑕佹弿榪板綋op涓篍POLL_CTL_ADD鏃剁殑鎵ц榪囩▼錛宻ys_epoll_ctl鍋氫竴浜涘畨鍏ㄦф鏌ュ悗榪涘叆ep_insert錛宔p_insert閲屽皢 ep_poll_callback鍋氫負鍥炴帀鍑芥暟鍔犲叆璁懼鐨勭瓑寰呴槦鍒楋紙鍋囧畾榪欐椂璁懼灝氭湭灝辯華錛夛紝鐢變簬姣忔poll_ctl鍙搷浣滀竴涓枃浠舵弿榪扮錛屽洜姝や篃鍙互璁や負榪欐槸涓涓狾(1)鎿嶄綔

ep_poll_callback鍑芥暟寰堝叧閿紝瀹冨湪鎵絳夊緟鐨勮澶囧氨緇悗琚郴緇熷洖鎺夛紝鎵ц涓や釜鎿嶄綔錛?

1錛屽皢灝辯華璁懼鍔犲叆灝辯華闃熷垪錛岃繖涓姝ラ伩鍏嶄簡鍍弍oll閭f牱鍦ㄨ澶囧氨緇悗鍐嶆杞鎵鏈夎澶囨壘灝辯華鑰咃紝闄嶄綆浜嗘椂闂村鏉傚害錛岀敱O錛坣錛夊埌O錛?錛?
2錛屽敜閱掕櫄鎷熺殑epoll鏂囦歡;
鏈鍚庢槸sys_epoll_wait錛岃繖閲屽疄闄呮墽琛屾搷浣滅殑鏄痚p_poll鍑芥暟銆傝鍑芥暟絳夊緟灝嗚繘紼嬭嚜韜彃鍏ヨ櫄鎷焑poll鏂囦歡鐨勭瓑寰呴槦鍒楋紝鐩村埌琚敜閱掞紙瑙佷笂闈p_poll_callback鍑芥暟鎻忚堪錛夛紝鏈鍚庢墽琛宔p_events_transfer灝嗙粨鏋滄嫹璐濆埌鐢ㄦ埛絀洪棿銆傜敱浜庡彧鎷瘋礉灝辯華璁懼淇℃伅錛屾墍浠ヨ繖閲岀殑鎷瘋礉鏄竴涓狾(1錛夋搷浣溿?br />榪樻湁涓涓浜哄叧蹇冪殑闂灝辨槸epoll瀵笶POLLET鐨勫鐞嗭紝鍗寵竟娌胯Е鍙戠殑澶勭悊錛岀矖鐣ョ湅浠g爜灝辨槸鎶婁竴閮ㄥ垎姘村鉤瑙﹀彂妯″紡涓嬪唴鏍稿仛鐨勫伐浣滀氦緇欑敤鎴鋒潵澶勭悊錛岀洿瑙変笂涓嶄細瀵規ц兘鏈夊お澶у獎鍝嶏紝鎰熷叴瓚g殑鏈嬪弸嬈㈣繋璁ㄨ銆?
POLL/EPOLL瀵規瘮錛?
琛ㄩ潰涓妏oll鐨勮繃紼嬪彲浠ョ湅浣滄槸鐢變竴嬈poll_create/鑻ュ共嬈poll_ctl/涓嬈poll_wait/涓嬈lose絳夌郴緇熻皟鐢ㄦ瀯鎴愶紝瀹為檯涓奺poll灝唒oll鍒嗘垚鑻ュ共閮ㄥ垎瀹炵幇鐨勫師鍥犳鏄洜涓烘湇鍔″櫒杞歡涓嬌鐢╬oll鐨勭壒鐐癸紙姣斿Web鏈嶅姟鍣級錛?
1錛岄渶瑕佸悓鏃秔oll澶ч噺鏂囦歡鎻忚堪絎?
2錛屾瘡嬈oll瀹屾垚鍚庡氨緇殑鏂囦歡鎻忚堪絎﹀彧鍗犳墍鏈夎poll鐨勬弿榪扮鐨勫緢灝戜竴閮ㄥ垎銆?
3錛屽墠鍚庡嬈oll璋冪敤瀵規枃浠舵弿榪扮鏁扮粍錛坲fds錛夌殑淇敼鍙槸寰堝皬;
浼犵粺鐨刾oll鍑芥暟鐩稿綋浜庢瘡嬈¤皟鐢ㄩ兘閲嶈搗鐐夌伓錛屼粠鐢ㄦ埛絀洪棿瀹屾暣璇誨叆ufds錛屽畬鎴愬悗鍐嶆瀹屽叏鎷瘋礉鍒扮敤鎴風┖闂達紝鍙﹀姣忔poll閮介渶瑕佸鎵鏈夎澶囧仛鑷沖皯鍋氫竴嬈″姞鍏ュ拰鍒犻櫎絳夊緟闃熷垪鎿嶄綔錛岃繖浜涢兘鏄綆鏁堢殑鍘熷洜銆?

epoll灝嗕互涓婃儏鍐甸兘緇嗗寲鑰冭檻錛屼笉闇瑕佹瘡嬈¢兘瀹屾暣璇誨叆杈撳嚭ufds錛屽彧闇浣跨敤epoll_ctl璋冩暣鍏朵腑涓灝忛儴鍒嗭紝涓嶉渶瑕佹瘡嬈poll_wait閮芥墽琛屼竴嬈″姞鍏ュ垹闄ょ瓑寰呴槦鍒楁搷浣滐紝鍙﹀鏀硅繘鍚庣殑鏈哄埗浣跨殑涓嶅繀鍦ㄦ煇涓澶囧氨緇悗鎼滅儲鏁翠釜璁懼鏁扮粍榪涜鏌ユ壘錛岃繖浜涢兘鑳芥彁楂樻晥鐜囥傚彟澶栨渶鏄庢樉鐨勪竴鐐癸紝浠庣敤鎴風殑浣跨敤鏉ヨ錛屼嬌鐢╡poll涓嶅繀姣忔閮借疆璇㈡墍鏈夎繑鍥炵粨鏋滃凡鎵懼嚭鍏朵腑鐨勫氨緇儴鍒嗭紝O錛坣錛夊彉O錛?錛夛紝瀵規ц兘涔熸彁楂樹笉灝戙?

姝ゅ榪欓噷榪樺彂鐜頒竴鐐癸紝鏄笉鏄皢epoll_ctl鏀規垚涓嬈″彲浠ュ鐞嗗涓猣d錛堝儚semctl閭f牱錛変細鎻愰珮浜涜鎬ц兘鍛紵鐗瑰埆鏄湪鍋囪緋葷粺璋冪敤姣旇緝鑰楁椂鐨勫熀紜涓娿備笉榪囧叧浜庣郴緇熻皟鐢ㄧ殑鑰楁椂闂榪樹細鍦ㄤ互鍚庡垎鏋愩?/p>

POLL/EPOLL嫻嬭瘯鏁版嵁瀵規瘮錛?
嫻嬭瘯鐨勭幆澧冿細鎴戝啓浜嗕笁孌典唬鐮佹潵鍒嗗埆妯℃嫙鏈嶅姟鍣紝媧誨姩鐨勫鎴風錛屽兊姝葷殑瀹㈡埛绔紝鏈嶅姟鍣ㄨ繍琛屼簬涓涓嚜緙栬瘧鐨勬爣鍑?.6.11鍐呮牳緋葷粺涓婏紝紜歡涓?PIII933錛屼袱涓鎴風鍚勮嚜榪愯鍦ㄥ彟澶栫殑PC涓婏紝榪欎袱鍙癙C姣旀湇鍔″櫒鐨勭‖浠舵ц兘瑕佸ソ錛屼富瑕佹槸淇濊瘉鑳借交鏄撹鏈嶅姟鍣ㄦ弧杞斤紝涓夊彴鏈哄櫒闂翠嬌鐢ㄤ竴涓?00M浜ゆ崲鏈鴻繛鎺ャ?
鏈嶅姟鍣ㄦ帴鍙楀茍poll鎵鏈夎繛鎺ワ紝濡傛灉鏈塺equest鍒拌揪鍒欏洖澶嶄竴涓猺esponse錛岀劧鍚庣戶緇璸oll銆?br />媧誨姩鐨勫鎴風錛圓ctive Client錛夋ā鎷熻嫢騫插茍鍙戠殑媧誨姩榪炴帴錛岃繖浜涜繛鎺ヤ笉闂存柇鐨勫彂閫佽姹傛帴鍙楀洖澶嶃?br />鍍墊鐨勫鎴風錛坺ombie錛夋ā鎷熶竴浜涘彧榪炴帴浣嗕笉鍙戦佽姹傜殑瀹㈡埛绔紝鍏剁洰鐨勫彧鏄崰鐢ㄦ湇鍔″櫒鐨刾oll鎻忚堪絎﹁祫婧愩?
嫻嬭瘯榪囩▼錛氫繚鎸?0涓茍鍙戞椿鍔ㄨ繛鎺ワ紝涓嶆柇鐨勮皟鏁村兊騫跺彂榪炴帴鏁幫紝璁板綍鍦ㄤ笉鍚屾瘮渚嬩笅浣跨敤poll涓巈poll鐨勬ц兘宸埆銆傚兊姝誨茍鍙戣繛鎺ユ暟鏍規嵁姣斾緥鍒嗗埆鏄細0錛?0錛?0錛?0錛?0錛?60錛?20錛?40錛?280錛?560錛?120錛?0240銆?
涓嬪浘涓í杞磋〃紺哄兊姝誨茍鍙戣繛鎺ヤ笌媧誨姩騫跺彂榪炴帴涔嬫瘮錛岀旱杞磋〃紺哄畬鎴?0000嬈¤姹傚洖澶嶆墍鑺辮垂鐨勬椂闂達紝浠ョ涓哄崟浣嶃傜孩鑹茬嚎鏉¤〃紺簆oll鏁版嵁錛岀豢鑹茶〃紺?epoll鏁版嵁銆傚彲浠ョ湅鍑猴紝poll鍦ㄦ墍鐩戞帶鐨勬枃浠舵弿榪扮鏁伴噺澧炲姞鏃訛紝鍏惰楁椂鍛堢嚎鎬у闀匡紝鑰宔poll鍒欑淮鎸佷簡涓涓鉤紼崇殑鐘舵侊紝鍑犱箮涓嶅彈鎻忚堪絎︿釜鏁板獎鍝嶃?
鍦ㄧ洃鎺х殑鎵鏈夊鎴風閮芥槸媧誨姩鏃訛紝poll鐨勬晥鐜囦細鐣ラ珮浜巈poll錛堜富瑕佸湪鍘熺偣闄勮繎錛屽嵆鍍墊騫跺彂榪炴帴涓?鏃訛紝鍥句笂涓嶆槗鐪嬪嚭鏉ワ級錛岀┒绔焑poll瀹炵幇姣攑oll澶嶆潅錛岀洃鎺у皯閲忔弿榪扮騫墮潪瀹冪殑闀垮銆?/p>



鏉庨槼 2012-02-09 13:48 鍙戣〃璇勮
]]>
鍔犻烲inux紼嬪簭緙栬瘧http://m.shnenglu.com/deane/articles/165217.html鏉庨槼鏉庨槼Thu, 09 Feb 2012 05:45:00 GMThttp://m.shnenglu.com/deane/articles/165217.htmlhttp://m.shnenglu.com/deane/comments/165217.htmlhttp://m.shnenglu.com/deane/articles/165217.html#Feedback0http://m.shnenglu.com/deane/comments/commentRss/165217.htmlhttp://m.shnenglu.com/deane/services/trackbacks/165217.html欏圭洰瓚婃潵瓚婂ぇ錛屾瘡嬈¢渶瑕侀噸鏂?a onclick="javascript:tagshow(event, '%E7%BC%96%E8%AF%91');" href="javascript:;" target="_self">緙栬瘧鏁翠釜欏圭洰閮芥槸涓浠跺緢嫻垂鏃墮棿鐨勪簨鎯呫俁esearch浜嗕竴涓嬶紝鎵懼埌浠ヤ笅鍙互甯姪鎻愰珮閫熷害鐨勬柟娉曪紝鎬葷粨涓涓嬨?

銆銆tmpfs

銆銆鏈変漢璇村湪Windows涓嬬敤浜哛AMDisk鎶婁竴涓」鐩紪璇戞椂闂翠粠4.5灝忔椂鍑忓皯鍒頒簡5鍒嗛挓錛屼篃璁歌繖涓暟瀛楁槸鏈夌偣澶稿紶浜嗭紝涓嶈繃綺楁兂鎯籌紝鎶?a onclick="javascript:tagshow(event, '%E6%96%87%E4%BB%B6');" href="javascript:;" target="_self">鏂囦歡鏀懼埌鍐呭瓨涓婂仛緙栬瘧搴旇鏄瘮鍦ㄧ鐩樹笂蹇浜嗗惂錛屽挨鍏跺鏋滅紪璇戝櫒闇瑕佺敓鎴愬緢澶氫復鏃舵枃浠剁殑璇濄?/p>

銆銆榪欎釜鍋氭硶鐨勫疄鐜版垚鏈渶浣庯紝鍦?a onclick="javascript:tagshow(event, 'Linux');" href="javascript:;" target="_self">Linux涓紝鐩存帴mount涓涓猼mpfs灝卞彲浠ヤ簡銆傝屼笖瀵規墍緙栬瘧鐨勫伐紼嬫病鏈変換浣曡姹傦紝涔熶笉鐢ㄦ敼鍔ㄧ紪璇戠幆澧冦?/p>

銆銆mount -t tmpfs tmpfs ~/build -o size=1G

銆銆鐢?.6.32.2鐨凩inux Kernel鏉?span class="channel_keylink">嫻嬭瘯涓涓嬬紪璇戦熷害錛?/p>

銆銆鐢ㄧ墿鐞嗙鐩橈細40鍒?6縐?/p>

銆銆鐢╰mpfs錛?9鍒?6縐?/p>

銆銆鍛?#8230;…娌′粈涔堝彉鍖栥傜湅鏉ョ紪璇戞參寰堝ぇ紼嬪害涓婄摱棰堝茍涓嶅湪IO涓婇潰銆備絾瀵逛簬涓涓疄闄呴」鐩潵璇達紝緙栬瘧榪囩▼涓彲鑳借繕浼氭湁鎵撳寘絳塈O瀵嗛泦鐨勬搷浣滐紝鎵浠ュ彧瑕佸彲鑳斤紝鐢╰mpfs鏄湁鐩婃棤瀹崇殑銆傚綋鐒跺浜庡ぇ欏圭洰鏉ヨ錛屼綘闇瑕佹湁瓚沖鐨勫唴瀛樻墠鑳借礋鎷呭緱璧瘋繖涓猼mpfs鐨勫紑閿銆?/p>

銆銆make -j

銆銆鏃㈢劧IO涓嶆槸鐡墮錛岄偅CPU灝卞簲璇ユ槸涓涓獎鍝嶇紪璇戦熷害鐨勯噸瑕佸洜绱犱簡銆?/p>

銆銆鐢╩ake -j甯︿竴涓?a onclick="javascript:tagshow(event, '%E5%8F%82%E6%95%B0');" href="javascript:;" target="_self">鍙傛暟錛屽彲浠ユ妸欏圭洰鍦ㄨ繘琛屽茍琛岀紪璇戯紝姣斿鍦ㄤ竴鍙板弻鏍哥殑鏈哄櫒涓婏紝瀹屽叏鍙互鐢╩ake -j4錛岃make鏈澶氬厑璁?涓紪璇?a onclick="javascript:tagshow(event, '%E5%91%BD%E4%BB%A4');" href="javascript:;" target="_self">鍛戒護鍚屾椂鎵ц錛岃繖鏍峰彲浠ユ洿鏈夋晥鐨勫埄鐢–PU璧勬簮銆?/p>

銆銆榪樻槸鐢↘ernel鏉?span class="channel_keylink">嫻嬭瘯錛?/p>

銆銆鐢╩ake錛?40鍒?6縐?/p>

銆銆鐢╩ake -j4錛?3鍒?6縐?/p>

銆銆鐢╩ake -j8錛?2鍒?9縐?/p>

銆銆鐢辨鐪嬫潵錛屽湪澶氭牳CPU涓婏紝閫傚綋鐨勮繘琛屽茍琛岀紪璇戣繕鏄彲浠ユ槑鏄炬彁楂樼紪璇戦熷害鐨勩備絾騫惰鐨勪換鍔′笉瀹滃お澶氾紝涓鑸槸浠PU鐨勬牳蹇冩暟鐩殑涓ゅ嶄負瀹溿?/p>

銆銆涓嶈繃榪欎釜鏂規涓嶆槸瀹屽叏娌℃湁cost鐨勶紝濡傛灉欏圭洰鐨凪akefile涓嶈鑼冿紝娌℃湁姝g‘鐨?a onclick="javascript:tagshow(event, '%E8%AE%BE%E7%BD%AE');" href="javascript:;" target="_self">璁劇疆濂戒緷璧栧叧緋伙紝騫惰緙栬瘧鐨勭粨鏋滃氨鏄紪璇戜笉鑳芥甯歌繘琛屻傚鏋滀緷璧栧叧緋昏緗繃浜庝繚瀹堬紝鍒欏彲鑳芥湰韜紪璇戠殑鍙茍琛屽害灝變笅闄嶄簡錛屼篃涓嶈兘鍙栧緱鏈浣崇殑鏁堟灉銆?/p>

銆銆ccache

銆銆ccache鐢ㄤ簬鎶婄紪璇戠殑涓棿緇撴灉榪涜緙撳瓨錛屼互渚垮湪鍐嶆緙栬瘧鐨勬椂鍊欏彲浠ヨ妭鐪佹椂闂淬傝繖瀵逛簬鐜㎏ernel鏉ヨ瀹炲湪鏄啀濂戒笉榪囦簡錛屽洜涓虹粡甯擱渶瑕佷慨鏀逛竴浜汯ernel鐨勪唬鐮侊紝鐒跺悗鍐嶉噸鏂扮紪璇戯紝鑰岃繖涓ゆ緙栬瘧澶ч儴鍒嗕笢瑗垮彲鑳介兘娌℃湁鍙戠敓鍙樺寲銆傚浜庡鉤鏃?a onclick="javascript:tagshow(event, '%E5%BC%80%E5%8F%91');" href="javascript:;" target="_self">寮鍙?/strong>欏圭洰鏉ヨ錛屼篃鏄竴鏍楓備負浠涔堜笉鏄洿鎺ョ敤make鎵鏀寔鐨勫閲忕紪璇戝憿錛熻繕鏄洜涓虹幇瀹炰腑錛屽洜涓篗akefile鐨勪笉瑙勮寖錛屽緢鍙兘榪欑“鑱槑”鐨勬柟妗堟牴鏈笉鑳芥甯稿伐浣滐紝鍙湁姣忔make clean鍐峬ake鎵嶈銆?/p>

銆銆瀹夎瀹宑cache鍚庯紝鍙互鍦?usr/local/bin涓嬪緩绔媑cc錛実++錛宑++錛宑c鐨剆ymbolic link錛岄摼鍒?usr/bin/ccache涓娿傛諱箣紜緋葷粺鍦ㄨ皟鐢╣cc絳夊懡浠ゆ椂浼氳皟鐢ㄥ埌ccache灝卞彲浠ヤ簡錛堥氬父鎯呭喌涓?usr/local /bin浼氬湪PATH涓帓鍦?usr/bin鍓嶉潰錛夈?/p>

銆銆緇х畫嫻嬭瘯錛?/p>

銆銆鐢╟cache鐨勭涓嬈$紪璇?make -j4)錛?3鍒?8縐?/p>

銆銆鐢╟cache鐨勭浜屾緙栬瘧(make -j4)錛?鍒?8縐?/p>

銆銆鐢╟cache鐨勭涓夋緙栬瘧(淇敼鑻ュ共閰嶇疆錛宮ake -j4)錛?3鍒?8縐?/p>

銆銆鐪嬫潵淇敼閰嶇疆錛堟垜鏀逛簡CPU綾誨瀷...錛夊ccache鐨勫獎鍝嶆槸寰堝ぇ鐨勶紝鍥犱負鍩烘湰澶存枃浠跺彂鐢熷彉鍖栧悗錛屽氨瀵艱嚧鎵鏈夌紦瀛?a onclick="javascript:tagshow(event, '%E6%95%B0%E6%8D%AE');" href="javascript:;" target="_self">鏁版嵁閮芥棤鏁堜簡錛屽繀欏婚噸澶存潵鍋氥備絾濡傛灉鍙槸淇敼涓浜?c鏂囦歡鐨勪唬鐮侊紝ccache鐨勬晥鏋滆繕鏄浉褰撴槑鏄劇殑銆傝屼笖浣跨敤ccache瀵歸」鐩病鏈夌壒鍒殑渚濊禆錛屽竷緗叉垚鏈緢浣庯紝榪欏湪鏃ュ父宸ヤ綔涓緢瀹炵敤銆?/p>

銆銆鍙互鐢╟cache -s鏉ユ煡鐪媍ache鐨勪嬌鐢ㄥ拰鍛戒腑鎯呭喌錛?/p>

銆銆cache directory                     /home/lifanxi/.ccachecache hit                           7165cache miss                         14283called for link                       71not a C/C++file                     120no input file                       3045files in cache                     28566cache size                          81.7 Mbytesmax cache size                     976.6 Mbytes

銆銆鍙互鐪嬪埌錛屾樉鐒跺彧鏈夌浜岀紪嬈¤瘧鏃禼ache鍛戒腑浜嗭紝cache miss鏄涓嬈″拰絎笁嬈$紪璇戝甫鏉ョ殑銆備袱嬈ache鍗犵敤浜?1.7M鐨勭鐩橈紝榪樻槸瀹屽叏鍙互鎺ュ彈鐨勩?/p>

銆銆distcc

銆銆涓鍙版満鍣ㄧ殑鑳藉姏鏈夐檺錛屽彲浠ヨ仈鍚堝鍙扮數鑴戜竴璧鋒潵緙栬瘧銆傝繖鍦ㄥ叕鍙哥殑鏃ュ父寮鍙戜腑涔熸槸鍙鐨勶紝鍥犱負鍙兘姣忎釜寮鍙戜漢鍛橀兘鏈夎嚜宸辯殑寮鍙戠紪璇戠幆澧冿紝瀹冧滑鐨勭紪璇戝櫒鐗堟湰涓鑸槸涓鑷寸殑錛屽叕鍙哥殑緗戠粶涔熼氬父鍏鋒湁杈冨ソ鐨?a onclick="javascript:tagshow(event, '%E6%80%A7%E8%83%BD');" href="javascript:;" target="_self">鎬ц兘銆傝繖鏃跺氨鏄痙istcc澶ф樉韜墜鐨勬椂鍊欎簡銆?/p>

銆銆浣跨敤distcc錛屽茍涓嶅儚鎯寵薄涓偅鏍瘋姹傛瘡鍙扮數鑴戦兘鍏鋒湁瀹屽叏涓鑷寸殑鐜錛屽畠鍙姹傛簮浠g爜鍙互鐢╩ake -j騫惰緙栬瘧錛屽茍涓斿弬涓庡垎甯冨紡緙栬瘧鐨勭數鑴戠郴緇熶腑鍏鋒湁鐩稿悓鐨勭紪璇戝櫒銆傚洜涓哄畠鐨勫師鐞嗗彧鏄妸棰勫鐞嗗ソ鐨勬簮鏂囦歡鍒嗗彂鍒板鍙拌綆楁満涓婏紝棰勫鐞嗐佺紪璇戝悗鐨勭洰鏍囨枃浠剁殑閾炬帴鍜屽叾瀹冮櫎緙栬瘧浠ュ鐨勫伐浣滀粛鐒舵槸鍦ㄥ彂璧風紪璇戠殑涓繪帶鐢佃剳涓婂畬鎴愶紝鎵浠ュ彧瑕佹眰鍙戣搗緙栬瘧鐨勯偅鍙版満鍣ㄥ叿澶囦竴濂楀畬鏁寸殑緙栬瘧鐜灝卞彲浠ヤ簡銆?/p>

銆銆distcc瀹夎鍚庯紝鍙互鍚姩涓涓嬪畠鐨勬湇鍔★細

銆銆/usr/bin/distccd  --daemon --allow 10.64.0.0/16

銆銆榛樿鐨?632绔彛鍏佽鏉ヨ嚜鍚屼竴涓綉緇滅殑distcc榪炴帴銆?/p>

銆銆鐒跺悗璁劇疆涓涓婦ISTCC_HOSTS鐜鍙橀噺錛岃緗彲浠ュ弬涓庣紪璇戠殑鏈哄櫒鍒楄〃銆傞氬父localhost涔熷弬涓庣紪璇戯紝浣嗗鏋滃彲浠ュ弬涓庣紪璇戠殑鏈哄櫒寰堝錛屽垯鍙互鎶妉ocalhost浠庤繖涓垪琛ㄤ腑鍘繪帀錛岃繖鏍鋒湰鏈哄氨瀹屽叏鍙槸榪涜棰勫鐞嗐佸垎鍙戝拰閾炬帴浜嗭紝緙栬瘧閮藉湪鍒殑鏈哄櫒涓婂畬鎴愩傚洜涓烘満鍣ㄥ緢澶氭椂錛宭ocalhost鐨勫鐞嗚礋鎷呭緢閲嶏紝鎵浠ュ畠灝變笉鍐?#8220;鍏艱亴”緙栬瘧浜嗐?/p>

銆銆export DISTCC_HOSTS="localhost 10.64.25.1 10.64.25.2 10.64.25.3"

銆銆鐒跺悗涓巆cache綾諱技鎶奼++錛実cc絳夊父鐢ㄧ殑鍛戒護閾炬帴鍒?usr/bin/distcc涓婂氨鍙互浜嗐?/p>

銆銆鍦╩ake鐨勬椂鍊欙紝涔熷繀欏葷敤-j鍙傛暟錛屼竴鑸槸鍙傛暟鍙互鐢ㄦ墍鏈夊弬鐢ㄧ紪璇戠殑璁$畻鏈篊PU鍐呮牳鎬繪暟鐨勪袱鍊嶅仛涓哄茍琛岀殑浠誨姟鏁般?/p>

銆銆鍚屾牱嫻嬭瘯涓涓嬶細

銆銆涓鍙板弻鏍歌綆楁満錛宮ake -j4錛?3鍒?6縐?/p>

銆銆涓ゅ彴鍙屾牳璁$畻鏈猴紝make -j4錛?6鍒?0縐?/p>

銆銆涓ゅ彴鍙屾牳璁$畻鏈猴紝make -j8錛?5鍒?9縐?/p>

銆銆璺熸渶寮濮嬬敤涓鍙板弻鏍告椂鐨?3鍒嗛挓鐩告瘮錛岃繕鏄揩浜嗕笉灝戠殑銆傚鏋滄湁鏇村鐨勮綆楁満鍔犲叆錛屼篃鍙互寰楀埌鏇村ソ鐨勬晥鏋溿?/p>

銆銆鍦ㄧ紪璇戣繃紼嬩腑鍙互鐢╠istccmon-text鏉ユ煡鐪嬬紪璇戜換鍔$殑鍒嗛厤鎯呭喌銆俤istcc涔熷彲浠ヤ笌ccache鍚屾椂浣跨敤錛岄氳繃璁劇疆涓涓幆澧冨彉閲忓氨鍙互鍋氬埌錛岄潪甯告柟渚褲?/p>

銆銆鎬葷粨涓涓嬶細

銆銆tmpfs錛?瑙e喅IO鐡墮錛屽厖鍒嗗埄鐢ㄦ湰鏈哄唴瀛樿祫婧?/p>

銆銆make -j錛?鍏呭垎鍒╃敤鏈満璁$畻璧勬簮

銆銆distcc錛?鍒╃敤澶氬彴璁$畻鏈鴻祫婧?/p>

銆銆ccache錛?鍑忓皯閲嶅緙栬瘧鐩稿悓浠g爜鐨勬椂闂?/p>

銆銆榪欎簺宸ュ叿鐨勫ソ澶勯兘鍦ㄤ簬甯冪講鐨勬垚鏈浉瀵硅緝浣庯紝緇煎悎鍒╃敤榪欎簺宸ュ叿錛屽氨鍙互杞昏交鏉炬澗鐨勮妭鐪佺浉褰撳彲瑙傜殑鏃墮棿銆備笂闈粙緇嶇殑閮芥槸榪欎簺宸ュ叿鏈鍩烘湰鐨?a onclick="javascript:tagshow(event, '%E7%94%A8%E6%B3%95');" href="javascript:;" target="_self">鐢ㄦ硶錛屾洿澶氱殑鐢ㄦ硶鍙互鍙傝冨畠浠悇鑷殑man page銆?/p>

鏉庨槼 2012-02-09 13:45 鍙戣〃璇勮
]]>
Linux涓婫cc鐢熸垚鍜屼嬌鐢ㄩ潤鎬佸簱鍜屽姩鎬佸簱璇﹁В錛堣漿錛?/title><link>http://m.shnenglu.com/deane/articles/165216.html</link><dc:creator>鏉庨槼</dc:creator><author>鏉庨槼</author><pubDate>Thu, 09 Feb 2012 05:43:00 GMT</pubDate><guid>http://m.shnenglu.com/deane/articles/165216.html</guid><wfw:comment>http://m.shnenglu.com/deane/comments/165216.html</wfw:comment><comments>http://m.shnenglu.com/deane/articles/165216.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/deane/comments/commentRss/165216.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/deane/services/trackbacks/165216.html</trackback:ping><description><![CDATA[<span id="hvzpftn" class="Apple-style-span" style="word-spacing: 0px; font: medium Simsun; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span id="hvzpftn" class="Apple-style-span" style="font-size: 14px; line-height: 26px; font-family: Arial; text-align: left"> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-size: 18px; color: rgb(0,0,0)"><strong><br />涓銆佸熀鏈蹇?/strong></span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">1.1浠涔堟槸搴?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">鍦╳indows騫沖彴鍜宭inux騫沖彴涓嬮兘澶ч噺瀛樺湪鐫搴撱?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">鏈川涓婃潵璇村簱鏄竴縐嶅彲鎵ц浠g爜鐨勪簩榪涘埗褰㈠紡錛屽彲浠ヨ鎿嶄綔緋葷粺杞藉叆鍐呭瓨鎵ц銆?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">鐢變簬windows鍜宭inux鐨勫鉤鍙頒笉鍚岋紙涓昏鏄紪璇戝櫒銆佹眹緙栧櫒鍜岃繛鎺ュ櫒鐨勪笉鍚岋級錛屽洜姝や簩鑰呭簱鐨勪簩榪涘埗鏄笉鍏煎鐨勩?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">鏈枃浠呴檺浜庝粙緇峫inux涓嬬殑搴撱?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">1.2搴撶殑縐嶇被</p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">linux涓嬬殑搴撴湁涓ょ錛氶潤鎬佸簱鍜屽叡浜簱錛堝姩鎬佸簱錛夈?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">浜岃呯殑涓嶅悓鐐瑰湪浜庝唬鐮佽杞藉叆鐨勬椂鍒諱笉鍚屻?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">闈欐佸簱鐨勪唬鐮佸湪緙栬瘧榪囩▼涓凡緇忚杞藉叆鍙墽琛岀▼搴忥紝鍥犳浣撶Н杈冨ぇ銆?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">鍏變韓搴撶殑浠g爜鏄湪鍙墽琛岀▼搴忚繍琛屾椂鎵嶈澆鍏ュ唴瀛樼殑錛屽湪緙栬瘧榪囩▼涓粎綆鍗曠殑寮曠敤錛屽洜姝や唬鐮佷綋縐緝灝忋?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">1.3搴撳瓨鍦ㄧ殑鎰忎箟</p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">搴撴槸鍒漢鍐欏ソ鐨勭幇鏈夌殑錛屾垚鐔熺殑錛屽彲浠ュ鐢ㄧ殑浠g爜錛屼綘鍙互浣跨敤浣嗚璁板緱閬靛畧璁稿彲鍗忚銆?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">鐜板疄涓瘡涓▼搴忛兘瑕佷緷璧栧緢澶氬熀紜鐨勫簳灞傚簱錛屼笉鍙兘姣忎釜浜虹殑浠g爜閮戒粠闆跺紑濮嬶紝鍥犳搴撶殑瀛樺湪鎰忎箟闈炲悓瀵誨父銆?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">鍏變韓搴撶殑濂藉鏄紝涓嶅悓鐨勫簲鐢ㄧ▼搴忓鏋滆皟鐢ㄧ浉鍚岀殑搴擄紝閭d箞鍦ㄥ唴瀛橀噷鍙渶瑕佹湁涓浠借鍏變韓搴撶殑瀹炰緥銆?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">1.4搴撴枃浠舵槸濡備綍浜х敓鐨勫湪linux涓?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">闈欐佸簱鐨勫悗緙鏄?a錛屽畠鐨勪駭鐢熷垎涓ゆ</p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Step 1.鐢辨簮鏂囦歡緙栬瘧鐢熸垚涓鍫?o錛屾瘡涓?o閲岄兘鍖呭惈榪欎釜緙栬瘧鍗曞厓鐨勭鍙瘋〃</p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Step 2.ar鍛戒護灝嗗緢澶?o杞崲鎴?a錛屾垚涓洪潤鎬佸簱</p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">鍔ㄦ佸簱鐨勫悗緙鏄?so錛屽畠鐢眊cc鍔犵壒瀹氬弬鏁扮紪璇戜駭鐢熴?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">鍏蜂綋鏂規硶鍙傝鍚庢枃瀹炰緥銆?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">1.5搴撴枃浠舵槸濡備綍鍛藉悕鐨勶紝鏈夋病鏈変粈涔堣鑼?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">鍦╨inux涓嬶紝搴撴枃浠朵竴鑸斁鍦?usr/lib鍜?lib涓嬶紝</p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">闈欐佸簱鐨勫悕瀛椾竴鑸負libxxxx.a錛屽叾涓瓁xxx鏄lib鐨勫悕縐?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">鍔ㄦ佸簱鐨勫悕瀛椾竴鑸負libxxxx.so.major.minor錛寈xxx鏄lib鐨勫悕縐幫紝major鏄富鐗堟湰鍙鳳紝 minor鏄壇鐗堟湰鍙?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">1.6濡備綍鐭ラ亾涓涓彲鎵ц紼嬪簭渚濊禆鍝簺搴?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">ldd鍛戒護鍙互鏌ョ湅涓涓彲鎵ц紼嬪簭渚濊禆鐨勫叡浜簱錛?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">渚嬪# ldd /bin/lnlibc.so.6</p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">=> /lib/libc.so.6 (0×40021000)/lib/ld-linux.so.2</p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">=> /lib/ld- linux.so.2 (0×40000000)</p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">鍙互鐪嬪埌ln鍛戒護渚濊禆浜巐ibc搴撳拰ld-linux搴?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">1.7鍙墽琛岀▼搴忓湪鎵ц鐨勬椂鍊欏浣曞畾浣嶅叡浜簱鏂囦歡</p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">褰撶郴緇熷姞杞藉彲鎵ц浠g爜鏃跺欙紝鑳藉鐭ラ亾鍏舵墍渚濊禆鐨勫簱鐨勫悕瀛楋紝浣嗘槸榪橀渶瑕佺煡閬撶粷瀵硅礬寰勩?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">姝ゆ椂灝遍渶瑕佺郴緇熷姩鎬佽澆鍏ュ櫒(dynamic linker/loader)</p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">瀵逛簬elf鏍煎紡鐨勫彲鎵ц紼嬪簭錛屾槸鐢眑d-linux.so*鏉ュ畬鎴愮殑錛屽畠鍏堝悗鎼滅儲elf鏂囦歡鐨?nbsp;DT_RPATH孌?#8212;鐜鍙橀噺LD_LIBRARY_PATH—/etc/ld.so.cache鏂囦歡鍒楄〃—/lib/,/usr/lib鐩綍鎵懼埌搴撴枃浠跺悗灝嗗叾杞藉叆鍐呭瓨</p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">濡傦細export LD_LIBRARY_PATH=’pwd’</p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">灝嗗綋鍓嶆枃浠剁洰褰曟坊鍔犱負鍏變韓鐩綍</p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">1.8鍦ㄦ柊瀹夎涓涓簱涔嬪悗濡備綍璁╃郴緇熻兘澶熸壘鍒頒粬</p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">濡傛灉瀹夎鍦?lib鎴栬?usr/lib涓嬶紝閭d箞ld榛樿鑳藉鎵懼埌錛屾棤闇鍏朵粬鎿嶄綔銆?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">濡傛灉瀹夎鍦ㄥ叾浠栫洰褰曪紝闇瑕佸皢鍏舵坊鍔犲埌/etc/ld.so.cache鏂囦歡涓紝姝ラ濡備笅</p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">1.緙栬緫/etc/ld.so.conf鏂囦歡錛屽姞鍏ュ簱鏂囦歡鎵鍦ㄧ洰褰曠殑璺緞</p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">2.榪愯ldconfig錛岃鍛戒護浼氶噸寤?etc/ld.so.cache鏂囦歡</p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><br /></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">浜屻佺敤gcc鐢熸垚闈欐佸拰鍔ㄦ侀摼鎺ュ簱鐨勭ず渚?/span></p><span style="font-family: 瀹嬩綋"><strong></strong></span> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">鎴戜滑閫氬父鎶婁竴浜涘叕鐢ㄥ嚱鏁板埗浣滄垚鍑芥暟搴擄紝渚涘叾瀹冪▼搴忎嬌鐢ㄣ?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">鍑芥暟搴撳垎涓洪潤鎬佸簱鍜屽姩鎬佸簱涓ょ銆?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">闈欐佸簱鍦ㄧ▼搴忕紪璇戞椂浼氳榪炴帴鍒扮洰鏍囦唬鐮佷腑錛岀▼搴忚繍琛屾椂灝嗕笉鍐嶉渶瑕佽闈欐佸簱銆?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">鍔ㄦ佸簱鍦ㄧ▼搴忕紪璇戞椂騫朵笉浼氳榪炴帴鍒扮洰鏍囦唬鐮佷腑錛岃屾槸鍦ㄧ▼搴忚繍琛屾槸鎵嶈杞藉叆錛屽洜姝ゅ湪紼嬪簭榪愯鏃惰繕闇瑕佸姩鎬佸簱瀛樺湪銆?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">鏈枃涓昏閫氳繃涓句緥鏉ヨ鏄庡湪Linux涓浣曞垱寤洪潤鎬佸簱鍜屽姩鎬佸簱錛屼互鍙婁嬌鐢ㄥ畠浠?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">涓轟簡渚夸簬闃愯堪錛屾垜浠厛鍋氫竴閮ㄥ垎鍑嗗宸ヤ綔銆?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><strong>2.1鍑嗗濂芥祴璇曚唬鐮乭ello.h銆乭ello.c鍜宮ain.c錛?/strong></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">hello.h(瑙佺▼搴?)涓鴻鍑芥暟搴撶殑澶存枃浠躲?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">hello.c(瑙佺▼搴?)鏄嚱鏁板簱鐨勬簮紼嬪簭錛屽叾涓寘鍚叕鐢ㄥ嚱鏁癶ello錛岃鍑芥暟灝嗗湪灞忓箷涓婅緭鍑?Hello XXX!"銆?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">main.c(瑙佺▼搴?)涓烘祴璇曞簱鏂囦歡鐨勪富紼嬪簭錛屽湪涓葷▼搴忎腑璋冪敤浜嗗叕鐢ㄥ嚱鏁癶ello銆?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> 紼嬪簭1: hello.h</p> <table cellspacing="0" cellpadding="0" width="95%" bgcolor="#f1f1f1" border="1"> <tbody> <tr> <td> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">#ifndef HELLO_H<span id="hvzpftn" class="Apple-converted-space"> </span><br />#define HELLO_H<span id="hvzpftn" class="Apple-converted-space"> </span><br />  <br />void hello(const char *name);<span id="hvzpftn" class="Apple-converted-space"> </span><br />  <br />#endif</p></td></tr></tbody></table><br /> <div>紼嬪簭2錛歨ello.c <table cellspacing="0" cellpadding="0" width="95%" bgcolor="#f1f1f1" border="1"> <tbody> <tr> <td> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">#include <stdio.h><span id="hvzpftn" class="Apple-converted-space"> </span><br />void hello(const char *name) { </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">        printf("Hello %s!\n", name);<span id="hvzpftn" class="Apple-converted-space"> </span><br />}</p></td></tr></tbody></table><br /></div> <div><span style="font-family: 瀹嬩綋">紼嬪簭3錛歮ain.c</span> <table cellspacing="0" cellpadding="0" width="95%" bgcolor="#f1f1f1" border="1"> <tbody> <tr> <td> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">#include "hello.h"<span id="hvzpftn" class="Apple-converted-space"> </span><br /> int main()<span id="hvzpftn" class="Apple-converted-space"> </span><br /> {<span id="hvzpftn" class="Apple-converted-space"> </span><br />     hello("everyone");<span id="hvzpftn" class="Apple-converted-space"> </span><br />     return 0;<span id="hvzpftn" class="Apple-converted-space"> </span><br /> }</p></td></tr></tbody></table> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><strong>2.2闂鐨勬彁鍑?/strong></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">娉ㄦ剰錛氳繖涓椂鍊欙紝鎴戜滑緙栬瘧濂界殑hello.o鏄棤娉曢氳繃gcc –o 緙栬瘧鐨勶紝榪欎釜閬撶悊闈炲父綆鍗曪紝</p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">hello.c鏄竴涓病鏈塵ain鍑芥暟鐨?c紼嬪簭錛屽洜姝や笉澶熸垚涓涓畬鏁寸殑紼嬪簭錛屽鏋滀嬌鐢╣cc –o 緙栬瘧騫惰繛鎺ュ畠錛孏CC灝嗘姤閿欍?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">鏃犺闈欐佸簱錛岃繕鏄姩鎬佸簱錛岄兘鏄敱.o鏂囦歡鍒涘緩鐨勩傚洜姝わ紝鎴戜滑蹇呴』灝嗘簮紼嬪簭hello.c閫氳繃gcc鍏堢紪璇戞垚.o鏂囦歡銆?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">榪欎釜鏃跺欐垜浠湁涓夌鎬濊礬錛?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">1錛?nbsp; 閫氳繃緙栬瘧澶氫釜婧愭枃浠訛紝鐩存帴灝嗙洰鏍囦唬鐮佸悎鎴愪竴涓?o鏂囦歡銆?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">2錛?nbsp; 閫氳繃鍒涘緩闈欐侀摼鎺ュ簱libmyhello.a錛屼嬌寰梞ain鍑芥暟璋冪敤hello鍑芥暟鏃跺彲璋冪敤闈欐侀摼鎺ュ簱銆?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">3錛?nbsp; 閫氳繃鍒涘緩鍔ㄦ侀摼鎺ュ簱libmyhello.so錛屼嬌寰梞ain鍑芥暟璋冪敤hello鍑芥暟鏃跺彲璋冪敤闈欐侀摼鎺ュ簱銆?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><strong>2.3鎬濊礬涓錛氱紪璇戝涓簮鏂囦歡</strong></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">鍦ㄧ郴緇熸彁紺虹涓嬮敭鍏ヤ互涓嬪懡浠ゅ緱鍒?/span><span style="font-family: 瀹嬩綋">hello.o</span><span style="font-family: 瀹嬩綋">鏂囦歡銆?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋"># gcc -c hello.c</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">涓轟粈涔堜笉浣跨敤</span><span style="font-family: 瀹嬩綋">gcc–o hello hello.cpp </span><span style="font-family: 瀹嬩綋">榪欎釜閬撶悊鎴戜滑涔嬪墠宸茬粡璇翠簡錛屼嬌鐢?/span><span style="font-family: 瀹嬩綋">-c</span><span style="font-family: 瀹嬩綋">鏄粈涔堟剰鎬濆憿錛熻繖娑夊強鍒?/span><span style="font-family: 瀹嬩綋">gcc </span><span style="font-family: 瀹嬩綋">緙栬瘧閫夐」鐨勫父璇嗐?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">鎴戜滑閫氬父浣跨敤鐨?/span><span style="font-family: 瀹嬩綋">gcc –o </span><span style="font-family: 瀹嬩綋">鏄皢</span><span style="font-family: 瀹嬩綋">.c</span><span style="font-family: 瀹嬩綋">婧愭枃浠剁紪璇戞垚涓轟竴涓彲鎵ц鐨勪簩榪涘埗浠g爜<span style="color: rgb(240,0,0)">(-o閫夐」鍏跺疄鏄埗瀹氳緭鍑烘枃浠舵枃浠跺悕錛屽鏋滀笉鍔?c閫夐」錛実cc榛樿浼氱紪璇戣繛鎺ョ敓鎴愬彲鎵ц鏂囦歡錛屾枃浠剁殑鍚嶇О鏈?o閫夐」鎸囧畾</span>)錛岃繖鍖呮嫭璋冪敤浣滀負</span><span style="font-family: 瀹嬩綋">GCC</span><span style="font-family: 瀹嬩綋">鍐呯殑涓閮ㄥ垎鐪熸鐨?/span><span style="font-family: 瀹嬩綋">C</span><span style="font-family: 瀹嬩綋">緙栬瘧鍣紙</span><span style="font-family: 瀹嬩綋">ccl</span><span style="font-family: 瀹嬩綋">錛夛紝浠ュ強璋冪敤</span><span style="font-family: 瀹嬩綋">GNU C</span><span style="font-family: 瀹嬩綋">緙栬瘧鍣ㄧ殑杈撳嚭涓疄闄呭彲鎵ц浠g爜鐨勫閮?/span><span style="font-family: 瀹嬩綋">GNU</span><span style="font-family: 瀹嬩綋">姹囩紪鍣紙as錛夊拰榪炴帴鍣ㄥ伐鍏鳳紙ld錛夈?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">鑰?/span><span style="font-family: 瀹嬩綋">gcc –c</span><span style="font-family: 瀹嬩綋">鏄嬌鐢?/span><span style="font-family: 瀹嬩綋">GNU</span><span style="font-family: 瀹嬩綋">姹囩紪鍣ㄥ皢婧愭枃浠惰漿鍖栦負鐩爣浠g爜涔嬪悗灝辯粨鏉燂紝鍦ㄨ繖縐嶆儏鍐典笅,鍙皟鐢ㄤ簡C緙栬瘧鍣紙ccl錛夊拰姹囩紪鍣紙as錛夛紝鑰岃繛鎺ュ櫒(ld)騫舵病鏈夎鎵ц錛屾墍浠ヨ緭鍑虹殑鐩爣鏂囦歡涓嶄細鍖呭惈浣滀負</span><span style="font-family: 瀹嬩綋">Linux</span><span style="font-family: 瀹嬩綋">紼嬪簭鍦ㄨ瑁呰澆鍜屾墽琛屾椂鎵蹇呴』鐨勫寘鍚俊鎭紝浣嗗畠鍙互鍦ㄤ互鍚庤榪炴帴鍒頒竴涓▼搴忋?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">鎴戜滑榪愯</span><span style="font-family: 瀹嬩綋">ls</span><span style="font-family: 瀹嬩綋">鍛戒護鐪嬬湅鏄惁鐢熷瓨浜?/span><span style="font-family: 瀹嬩綋">hello.o</span><span style="font-family: 瀹嬩綋">鏂囦歡銆?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋"># ls</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">hello.c hello.h hello.o main.c</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">鍦?/span><span style="font-family: 瀹嬩綋">ls</span><span style="font-family: 瀹嬩綋">鍛戒護緇撴灉涓紝鎴戜滑鐪嬪埌浜?/span><span style="font-family: 瀹嬩綋">hello.o</span><span style="font-family: 瀹嬩綋">鏂囦歡錛屾湰姝ユ搷浣滃畬鎴愩?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">鍚岀悊緙栬瘧</span><span style="font-family: 瀹嬩綋">main</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">#gcc –c main.c</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">灝嗕袱涓枃浠墮摼鎺ユ垚涓涓?/span><span style="font-family: 瀹嬩綋">.o</span><span style="font-family: 瀹嬩綋">鏂囦歡銆?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">#gcc –o hello hello.o main.o</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">榪愯</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋"># ./hello</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">Hello everyone!</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">瀹屾垚</span><span style="font-family: 瀹嬩綋">^ ^!</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><strong>2.4鎬濊礬浜岋細闈欐侀摼鎺ュ簱</strong></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">涓嬮潰鎴戜滑鍏堟潵鐪嬬湅濡備綍鍒涘緩闈欐佸簱錛屼互鍙婁嬌鐢ㄥ畠銆?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">闈欐佸簱鏂囦歡鍚嶇殑鍛藉悕瑙勮寖鏄互</span><span style="font-family: 瀹嬩綋">lib</span><span style="font-family: 瀹嬩綋">涓哄墠緙錛岀揣鎺ョ潃璺熼潤鎬佸簱鍚?/span><span style="font-family: 瀹嬩綋">錛屾墿灞曞悕涓?/span><span style="font-family: 瀹嬩綋">.a</span><span style="font-family: 瀹嬩綋">銆備緥濡傦細鎴戜滑灝嗗垱寤虹殑闈欐佸簱鍚嶄負</span><span style="font-family: 瀹嬩綋">myhello</span><span style="font-family: 瀹嬩綋">錛屽垯闈欐佸簱鏂囦歡鍚嶅氨鏄?/span><span style="font-family: 瀹嬩綋">libmyhello.a</span><span style="font-family: 瀹嬩綋">銆傚湪鍒涘緩鍜屼嬌鐢ㄩ潤鎬佸簱鏃訛紝闇瑕佹敞鎰忚繖鐐廣?/span><span style="font-family: 瀹嬩綋">鍒涘緩闈欐佸簱鐢?/span><span style="font-family: 瀹嬩綋">ar</span><span style="font-family: 瀹嬩綋">鍛戒護</span><span style="font-family: 瀹嬩綋">銆?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">鍦ㄧ郴緇熸彁紺虹涓嬮敭鍏ヤ互涓嬪懡浠ゅ皢鍒涘緩闈欐佸簱鏂囦歡</span><span style="font-family: 瀹嬩綋">libmyhello.a</span><span style="font-family: 瀹嬩綋">銆?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋"># ar rcs libmyhello.a hello.o</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">鎴戜滑鍚屾牱榪愯</span><span style="font-family: 瀹嬩綋">ls</span><span style="font-family: 瀹嬩綋">鍛戒護鏌ョ湅緇撴灉錛?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋"># ls</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">hello.c  hello.h hello.o libmyhello.a main.c</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">ls</span><span style="font-family: 瀹嬩綋">鍛戒護緇撴灉涓湁</span><span style="font-family: 瀹嬩綋">libmyhello.a</span><span style="font-family: 瀹嬩綋">銆?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">闈欐佸簱鍒朵綔瀹屼簡錛屽浣曚嬌鐢ㄥ畠鍐呴儴鐨勫嚱鏁板憿錛熷彧闇瑕佸湪浣跨敤鍒拌繖浜涘叕鐢ㄥ嚱鏁扮殑婧愮▼搴忎腑鍖呭惈榪欎簺鍏敤鍑芥暟鐨勫師鍨嬪0鏄庯紝鐒跺悗鍦ㄧ敤</span><span style="font-family: 瀹嬩綋">gcc</span><span style="font-family: 瀹嬩綋">鍛戒護鐢熸垚鐩爣鏂囦歡鏃舵寚鏄庨潤鎬佸簱鍚嶏紝</span><span style="font-family: 瀹嬩綋">gcc</span><span style="font-family: 瀹嬩綋">灝嗕細浠庨潤鎬佸簱涓皢鍏敤鍑芥暟榪炴帴鍒扮洰鏍囨枃浠朵腑銆傛敞鎰忥紝</span><span style="color: rgb(240,0,0)"><span style="font-family: 瀹嬩綋">gcc</span><span style="font-family: 瀹嬩綋">浼氬湪闈欐佸簱鍚嶅墠鍔犱笂鍓嶇紑</span><span style="font-family: 瀹嬩綋">lib</span><span style="font-family: 瀹嬩綋">錛岀劧鍚庤拷鍔犳墿灞曞悕</span><span style="font-family: 瀹嬩綋">.a</span><span style="font-family: 瀹嬩綋">寰楀埌鐨勯潤鎬佸簱鏂囦歡鍚嶆潵鏌ユ壘闈欐佸簱鏂囦歡,鍥犳錛屾垜浠湪鍐欓渶瑕佽繛鎺ョ殑搴撴椂錛屽彧鍐欏悕瀛楀氨鍙互錛屽lib<span style="color: rgb(0,0,0)">myhello</span>.a鐨勫簱錛屽彧鍐?-l<span style="color: rgb(0,0,0)">myhello</span></span></span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">鍦ㄧ▼搴?/span><span style="font-family: 瀹嬩綋">3:main.c</span><span style="font-family: 瀹嬩綋">涓紝鎴戜滑鍖呭惈浜嗛潤鎬佸簱鐨勫ご鏂囦歡</span><span style="font-family: 瀹嬩綋">hello.h</span><span style="font-family: 瀹嬩綋">錛岀劧鍚庡湪涓葷▼搴?/span><span style="font-family: 瀹嬩綋">main</span><span style="font-family: 瀹嬩綋">涓洿鎺ヨ皟鐢ㄥ叕鐢ㄥ嚱鏁?/span><span style="font-family: 瀹嬩綋">hello</span><span style="font-family: 瀹嬩綋">銆備笅闈㈠厛鐢熸垚鐩爣紼嬪簭</span><span style="font-family: 瀹嬩綋">hello</span><span style="font-family: 瀹嬩綋">錛岀劧鍚庤繍琛?/span><span style="font-family: 瀹嬩綋">hello</span><span style="font-family: 瀹嬩綋">紼嬪簭鐪嬬湅緇撴灉濡備綍銆?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋"># gcc -o hello main.c -static -L. -lmyhello</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋"># ./hello</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">Hello everyone!</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">鎴戜滑鍒犻櫎闈欐佸簱鏂囦歡璇曡瘯鍏敤鍑芥暟</span><span style="font-family: 瀹嬩綋">hello</span><span style="font-family: 瀹嬩綋">鏄惁鐪熺殑榪炴帴鍒扮洰鏍囨枃浠?/span><span style="font-family: 瀹嬩綋"> hello</span><span style="font-family: 瀹嬩綋">涓簡銆?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋"># rm libmyhello.a</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">rm: remove regular file `libmyhello.a'? y</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋"># ./hello</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">Hello everyone!</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">紼嬪簭鐓у父榪愯錛岄潤鎬佸簱涓殑鍏敤鍑芥暟宸茬粡榪炴帴鍒扮洰鏍囨枃浠朵腑浜嗐?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋"><span style="font-family: 瀹嬩綋">闈欐侀摼鎺ュ簱鐨勪竴涓己鐐規槸錛屽鏋滄垜浠悓鏃惰繍琛屼簡璁稿紼嬪簭錛屽茍涓斿畠浠嬌鐢ㄤ簡鍚屼竴涓簱鍑芥暟錛岃繖鏍鳳紝鍦ㄥ唴瀛樹腑浼氬ぇ閲忔嫹璐濆悓涓搴撳嚱鏁般傝繖鏍鳳紝灝變細嫻垂寰堝鐝嶈吹鐨勫唴瀛樺拰瀛樺偍絀洪棿銆備嬌鐢ㄤ簡鍏變韓閾炬帴搴撶殑Linux灝卞彲浠ラ伩鍏嶈繖涓棶棰樸?/span></span></p><span style="font-family: 瀹嬩綋"></span> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">鍏變韓鍑芥暟搴撳拰闈欐佸嚱鏁板湪鍚屼竴涓湴鏂癸紝鍙槸鍚庣紑鏈夋墍涓嶅悓銆傛瘮濡傦紝鍦ㄤ竴涓吀鍨嬬殑Linux緋葷粺錛屾爣鍑嗙殑鍏變韓鏁板簭鍑芥暟搴撴槸/usr/lib/libm.so銆?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="color: rgb(240,0,0); font-family: 瀹嬩綋">褰撲竴涓▼搴忎嬌鐢ㄥ叡浜嚱鏁板簱鏃訛紝鍦ㄨ繛鎺ラ樁孌靛茍涓嶆妸鍑芥暟浠g爜榪炴帴榪涙潵錛岃屽彧鏄摼鎺ュ嚱鏁扮殑涓涓紩鐢ㄣ傚綋鏈緇堢殑鍑芥暟瀵煎叆鍐呭瓨寮濮嬬湡姝f墽琛屾椂錛屽嚱鏁板紩鐢ㄨ瑙f瀽錛屽叡浜嚱鏁板簱鐨勪唬鐮佹墠鐪熸瀵煎叆鍒板唴瀛樹腑銆傝繖鏍鳳紝鍏變韓閾炬帴搴撶殑鍑芥暟灝卞彲浠ヨ璁稿紼嬪簭鍚屾椂鍏變韓錛屽茍涓斿彧闇瀛樺偍涓嬈″氨鍙互浜嗐傚叡浜嚱鏁板簱鐨勫彟涓涓紭鐐規槸錛屽畠鍙互鐙珛鏇存柊錛屼笌璋冪敤瀹冪殑鍑芥暟姣笉褰卞搷銆?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><strong>2.5鎬濊礬涓夈佸姩鎬侀摼鎺ュ簱錛堝叡浜嚱鏁板簱錛?/strong></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">鎴戜滑緇х畫鐪嬬湅濡備綍鍦?/span><span style="font-family: 瀹嬩綋">Linux</span><span style="font-family: 瀹嬩綋">涓垱寤哄姩鎬佸簱銆傛垜浠繕鏄粠</span><span style="font-family: 瀹嬩綋">.o</span><span style="font-family: 瀹嬩綋">鏂囦歡寮濮嬨?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">鍔ㄦ佸簱鏂囦歡鍚嶅懡鍚嶈鑼冨拰闈欐佸簱鏂囦歡鍚嶅懡鍚嶈鑼冪被浼鹼紝涔熸槸鍦ㄥ姩鎬佸簱鍚嶅鍔犲墠緙</span><span style="font-family: 瀹嬩綋">lib</span><span style="font-family: 瀹嬩綋">錛屼絾鍏舵枃浠舵墿灞曞悕涓?/span><span style="font-family: 瀹嬩綋">.so</span><span style="font-family: 瀹嬩綋">銆備緥濡傦細鎴戜滑灝嗗垱寤虹殑鍔ㄦ佸簱鍚嶄負</span><span style="font-family: 瀹嬩綋">myhello</span><span style="font-family: 瀹嬩綋">錛屽垯鍔ㄦ佸簱鏂囦歡鍚嶅氨鏄?/span><span style="font-family: 瀹嬩綋">libmyhello.so</span><span style="font-family: 瀹嬩綋">銆傜敤</span><span style="font-family: 瀹嬩綋">gcc</span><span style="font-family: 瀹嬩綋">鏉ュ垱寤哄姩鎬佸簱銆?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">鍦ㄧ郴緇熸彁紺虹涓嬮敭鍏ヤ互涓嬪懡浠ゅ緱鍒板姩鎬佸簱鏂囦歡</span><span style="font-family: 瀹嬩綋">libmyhello.so</span><span style="font-family: 瀹嬩綋">銆?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋"># gcc -shared -fPIC -o libmyhello.so hello.o</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋"> </span><span style="font-family: 瀹嬩綋">“PIC”</span><span style="font-family: 瀹嬩綋">鍛戒護琛屾爣璁板憡璇?/span><span style="font-family: 瀹嬩綋">GCC</span><span style="font-family: 瀹嬩綋">浜х敓鐨勪唬鐮佷笉瑕佸寘鍚鍑芥暟鍜屽彉閲忓叿浣撳唴瀛樹綅緗殑寮曠敤錛岃繖鏄洜涓虹幇鍦ㄨ繕鏃犳硶鐭ラ亾浣跨敤璇ユ秷鎭唬鐮佺殑搴旂敤紼嬪簭浼氬皢瀹冭繛鎺ュ埌鍝竴孌靛唴瀛樺湴鍧絀洪棿銆傝繖鏍風紪璇戝嚭鐨?/span><span style="font-family: 瀹嬩綋">hello.o</span><span style="font-family: 瀹嬩綋">鍙互琚敤浜庡緩绔嬪叡浜摼鎺ュ簱銆傚緩绔嬪叡浜摼鎺ュ簱鍙渶瑕佺敤</span><span style="font-family: 瀹嬩綋">GCC</span><span style="font-family: 瀹嬩綋">鐨?/span><span style="font-family: 瀹嬩綋">”-shared”</span><span style="font-family: 瀹嬩綋">鏍囪鍗沖彲銆?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">鎴戜滑鐓ф牱浣跨敤</span><span style="font-family: 瀹嬩綋">ls</span><span style="font-family: 瀹嬩綋">鍛戒護鐪嬬湅鍔ㄦ佸簱鏂囦歡鏄惁鐢熸垚銆?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋"># ls</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">hello.cpp hello.h hello.o libmyhello.so main.cpp</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">璋冪敤鍔ㄦ侀摼鎺ュ簱緙栬瘧鐩爣鏂囦歡銆?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">鍦ㄧ▼搴忎腑浣跨敤鍔ㄦ佸簱鍜屼嬌鐢ㄩ潤鎬佸簱瀹屽叏涓鏍鳳紝涔熸槸鍦ㄤ嬌鐢ㄥ埌榪欎簺鍏敤鍑芥暟鐨勬簮紼嬪簭涓寘鍚繖浜涘叕鐢ㄥ嚱鏁扮殑鍘熷瀷澹版槑錛岀劧鍚庡湪鐢?/span><span style="font-family: 瀹嬩綋">gcc</span><span style="font-family: 瀹嬩綋">鍛戒護鐢熸垚鐩爣鏂囦歡鏃舵寚鏄庡姩鎬佸簱鍚嶈繘琛岀紪璇戙傛垜浠厛榪愯</span><span style="font-family: 瀹嬩綋">gcc</span><span style="font-family: 瀹嬩綋">鍛戒護鐢熸垚鐩爣鏂囦歡錛屽啀榪愯瀹冪湅鐪嬬粨鏋溿?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">濡傛灉鐩存帴鐢ㄥ涓嬫柟娉曡繘琛岀紪璇戯紝騫惰繛鎺ワ細</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋"># gcc -o hello main.c -L. -lmyhello</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">錛堜嬌鐢?/span><span style="font-family: 瀹嬩綋">”-lmyhello”</span><span style="font-family: 瀹嬩綋">鏍囪鏉ュ憡璇?/span><span style="font-family: 瀹嬩綋">GCC</span><span style="font-family: 瀹嬩綋">椹卞姩紼嬪簭鍦ㄨ繛鎺ラ樁孌靛紩鐢ㄥ叡浜嚱鏁板簱</span><span style="font-family: 瀹嬩綋">libmyhello.so</span><span style="font-family: 瀹嬩綋">銆?/span><span style="font-family: 瀹嬩綋">”-L.”</span><span style="font-family: 瀹嬩綋">鏍囪鍛婅瘔</span><span style="font-family: 瀹嬩綋">GCC</span><span style="font-family: 瀹嬩綋">鍑芥暟搴撳彲鑳戒綅浜庡綋鍓嶇洰褰曘傚惁鍒?/span><span style="font-family: 瀹嬩綋">GNU</span><span style="font-family: 瀹嬩綋">榪炴帴鍣ㄤ細鏌ユ壘鏍囧噯緋葷粺鍑芥暟鐩綍:<span style="font-size: 16px">瀹冨厛鍚庢悳绱?.elf鏂囦歡鐨?nbsp;DT_RPATH孌?#8212;2.鐜鍙橀噺LD_LIBRARY_PATH—3./etc/ld.so.cache鏂囦歡鍒楄〃—4./lib/,/usr/lib鐩綍鎵懼埌搴撴枃浠跺悗灝嗗叾杞藉叆鍐呭瓨,浣嗘槸鎴戜滑鐢熸垚鐨勫叡浜簱鍦ㄥ綋鍓嶆枃浠跺す涓嬶紝騫舵病鏈夊姞鍒頒笂榪扮殑4涓礬寰勭殑浠諱綍涓涓腑錛屽洜姝わ紝鎵ц鍚庝細鍑虹幇閿欒錛?/span></span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋"># ./hello</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">./hello: error while loading shared libraries: libmyhello.so: cannot open shared object file: No such file or directory</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">#</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">閿欒鎻愮ず錛屾壘涓嶅埌鍔ㄦ佸簱鏂囦歡</span><span style="font-family: 瀹嬩綋">libmyhello.so</span><span style="font-family: 瀹嬩綋">銆傜▼搴忓湪榪愯鏃訛紝浼氬湪</span><span style="font-family: 瀹嬩綋">/usr/lib</span><span style="font-family: 瀹嬩綋">鍜?/span><span style="font-family: 瀹嬩綋">/lib</span><span style="font-family: 瀹嬩綋">絳夌洰褰曚腑鏌ユ壘闇瑕佺殑鍔ㄦ佸簱鏂囦歡銆傝嫢鎵懼埌錛屽垯杞藉叆鍔ㄦ佸簱錛屽惁鍒欏皢鎻愮ず綾諱技涓婅堪閿欒鑰岀粓姝㈢▼搴忚繍琛屻傛湁澶氱鏂規硶鍙互瑙e喅錛?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">錛?錛夋垜浠皢鏂囦歡</span><span style="font-family: 瀹嬩綋"> libmyhello.so</span><span style="font-family: 瀹嬩綋">澶嶅埗鍒扮洰褰?/span><span style="font-family: 瀹嬩綋">/usr/lib</span><span style="font-family: 瀹嬩綋">涓紝鍐嶈瘯璇曘?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋"># mv libmyhello.so /usr/lib</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋"># ./hello</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">鎴愬姛錛?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">錛?錛夋棦鐒惰繛鎺ュ櫒浼氭悳瀵籐D_LIBRARY_PATH鎵鎸囧畾鐨勭洰褰曪紝閭d箞鎴戜滑鍙互灝嗚繖涓幆澧冨彉閲忚緗垚褰撳墠鐩綍錛?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">鍏堟墽琛岋細</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">export LD_LIBRARY_PATH=$(pwd)</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">鍐嶆墽琛岋細</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">./hello</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">鎴愬姛錛?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">錛?錛?/span></p><span style="font-family: 瀹嬩綋"></span> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">鎵ц錛?nbsp; </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">ldconfig   /usr/zhsoft/lib     <br />       <br />      <br />  娉?   褰撶敤鎴峰湪鏌愪釜鐩綍涓嬮潰鍒涘緩鎴栨嫹璐濅簡涓涓姩鎬侀摼鎺ュ簱,鑻ユ兂浣垮叾琚郴緇熷叡浜?鍙互鎵ц涓涓?<span style="color: rgb(240,0,0)">ldconfig   鐩綍鍚?/span>"榪欎釜鍛戒護.姝ゅ懡浠ょ殑鍔熻兘鍦ㄤ簬璁﹍dconfig灝嗘寚瀹氱洰褰曚笅鐨勫姩鎬侀摼鎺ュ簱琚郴緇熷叡浜搗鏉?鎰忓嵆:鍦ㄧ紦瀛樻枃浠?etc/ld.so.cache涓拷鍔犺繘鎸囧畾鐩綍涓嬬殑鍏變韓搴?鏈緥璁╃郴緇熷叡浜簡/usr/zhsoft/lib鐩綍涓嬬殑鍔ㄦ侀摼鎺ュ簱.璇ュ懡浠や細閲嶅緩/etc/ld.so.cache鏂囦歡</p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">鎴愬姛錛?/p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">錕ワ駿錕ワ駿錕ワ駿錕ワ駿錕ワ駿錕ワ駿錕ワ駿錕ワ駿錕ワ駿錕ワ駿錕ワ駿錕ワ駿錕ワ駿錕ワ駿錕ワ駿錕ワ駿</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">涓嬮潰鐨勮繖涓敊璇垜娌℃湁閬囧埌錛屼笉榪囦篃璁板綍涓嬶紝緇欓亣鍒扮殑浜猴細</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> <span style="font-family: 瀹嬩綋">{  </span><span style="font-family: 瀹嬩綋">榪欐鍚庢垜娌℃湁鎴愬姛,鎶ラ敊鍐呭濡備笅錛?/span><span style="font-family: 瀹嬩綋">/hello: error while loading shared libraries: /usr/lib/libmyhello.so: cannot restore segment prot after reloc: Permission denied</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">google浜嗕竴涓嬶紝鍙戠幇鏄?/span><span style="font-family: 瀹嬩綋">SELinux鎼炵殑楝鹼紝瑙e喅鍔炴硶鏈変袱涓細</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">1.<br />    chcon -t texrel_shlib_t   </span><span style="font-family: 瀹嬩綋">/usr/lib/libmyhello.so</span><span style="font-family: 瀹嬩綋"><br />    (chcon -t texrel_shlib_t "浣犱笉鑳絪hare鐨勫簱鐨勭粷瀵硅礬寰?)</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">2.<br />    #vi /etc/sysconfig/selinux file<br />    鎴栬呯敤<br />    #gedit /etc/sysconfig/selinux file<br />    淇敼SELINUX=disabled<br />    閲嶅惎</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">}</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">#</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">錕ワ駿錕ワ駿錕ワ駿錕ワ駿錕ワ駿錕ワ駿錕ワ駿錕ワ駿錕ワ駿錕ワ駿錕ワ駿錕ワ駿錕ワ駿錕ワ駿錕ワ駿錕ワ駿</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">榪欎篃榪涗竴姝ヨ鏄庝簡鍔ㄦ佸簱鍦ㄧ▼搴忚繍琛屾椂鏄渶瑕佺殑銆?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"> </p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">鍙互鏌ョ湅紼嬪簭鎵ц鏃惰皟鐢ㄥ姩鎬佸簱鐨勮繃紼嬶細</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋"># ldd hello<br />鎵ц test,鍙互鐪嬪埌瀹冩槸濡備綍璋冪敤鍔ㄦ佸簱涓殑鍑芥暟鐨勩?br />[pin@localhost 20090505]$ ldd hello<br />        linux-gate.so.1 => (0x00110000)<br />        libmyhello.so => /usr/lib/libmyhello.so (0x00111000)<br />        libc.so.6 => /lib/libc.so.6 (0x00859000)<br />        /lib/ld-linux.so.2 (0x0083a000)</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">鎴戜滑鍥炶繃澶寸湅鐪嬶紝鍙戠幇浣跨敤闈欐佸簱鍜屼嬌鐢ㄥ姩鎬佸簱緙栬瘧鎴愮洰鏍囩▼搴忎嬌鐢ㄧ殑gcc鍛戒護瀹屽叏涓鏍鳳紝<br />閭e綋闈欐佸簱鍜屽姩鎬佸簱鍚屽悕鏃訛紝gcc鍛戒護浼氫嬌鐢ㄥ摢涓簱鏂囦歡鍛紵鎶辯潃瀵歸棶棰樺繀絀跺埌搴曠殑蹇冩儏錛?br />鏉ヨ瘯璇曠湅銆?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">鍏堝垹闄ら櫎.c鍜?h澶栫殑鎵鏈夋枃浠訛紝鎭㈠鎴愭垜浠垰鍒氱紪杈戝畬涓句緥紼嬪簭鐘舵併?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋"># rm -f hello hello.o /usr/lib/libmyhello.so</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋"># ls</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">hello.c hello.h main.c</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">#</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">鍦ㄦ潵鍒涘緩闈欐佸簱鏂囦歡libmyhello.a鍜屽姩鎬佸簱鏂囦歡libmyhello.so銆?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋"># gcc -c hello.c</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋"># ar rcs libmyhello.a hello.o</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋"># gcc -shared -fPCI -o libmyhello.so hello.o</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋"># ls</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">hello.c hello.h hello.o libmyhello.a libmyhello.so main.c</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">#</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">閫氳繃涓婅堪鏈鍚庝竴鏉s鍛戒護錛屽彲浠ュ彂鐜伴潤鎬佸簱鏂囦歡libmyhello.a鍜屽姩鎬佸簱鏂囦歡libmyhello.so閮藉凡緇忕敓鎴愶紝騫墮兘鍦ㄥ綋鍓嶇洰褰曚腑銆傜劧鍚庯紝鎴戜滑榪愯gcc鍛戒護鏉ヤ嬌鐢ㄥ嚱鏁板簱myhello鐢熸垚鐩爣鏂囦歡hello錛屽茍榪愯紼嬪簭 hello銆?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋"># gcc -o hello main.c -L. -lmyhello</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋"># ./hello</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">./hello: error while loading shared libraries: libmyhello.so: cannot open shar<br />ed object file: No such file or directory</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">#</span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="color: rgb(240,0,0); font-family: 瀹嬩綋">浠庣▼搴廻ello榪愯鐨勭粨鏋滀腑寰堝鏄撶煡閬擄紝褰撻潤鎬佸簱鍜屽姩鎬佸簱鍚屽悕鏃訛紝 gcc鍛戒護灝嗕紭鍏堜嬌鐢ㄥ姩鎬佸簱銆?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="color: rgb(0,0,255)"><strong><span style="font-family: 瀹嬩綋">Note:</span></strong></span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><strong><span style="font-family: 瀹嬩綋">緙栬瘧鍙傛暟瑙f瀽</span></strong></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 榛戜綋"><br /></span><span style="font-family: 瀹嬩綋">鏈涓昏鐨勬槸GCC鍛戒護琛岀殑涓涓夐」:<br />-shared 璇ラ夐」鎸囧畾鐢熸垚鍔ㄦ佽繛鎺ュ簱錛堣榪炴帴鍣ㄧ敓鎴怲綾誨瀷鐨勫鍑虹鍙瘋〃錛屾湁鏃跺欎篃鐢熸垚寮辮繛鎺綾誨瀷鐨勫鍑虹鍙鳳級錛屼笉鐢ㄨ鏍囧織澶栭儴紼嬪簭鏃犳硶榪炴帴銆傜浉褰撲簬涓涓彲鎵ц鏂囦歡<br />l -fPIC錛氳〃紺虹紪璇戜負浣嶇疆鐙珛鐨勪唬鐮侊紝涓嶇敤姝ら夐」鐨勮瘽緙栬瘧鍚庣殑浠g爜鏄綅緗浉鍏崇殑鎵浠ュ姩鎬佽澆鍏ユ椂鏄氳繃浠g爜鎷瘋礉鐨勬柟寮忔潵婊¤凍涓嶅悓榪涚▼鐨勯渶瑕侊紝鑰屼笉鑳借揪鍒扮湡姝d唬鐮佹鍏變韓鐨勭洰鐨勩?br />l -L.錛氳〃紺鴻榪炴帴鐨勫簱鍦ㄥ綋鍓嶇洰褰曚腑<br />l -ltest錛氱紪璇戝櫒鏌ユ壘鍔ㄦ佽繛鎺ュ簱鏃舵湁闅愬惈鐨勫懡鍚嶈鍒欙紝鍗沖湪緇欏嚭鐨勫悕瀛楀墠闈㈠姞涓妉ib錛屽悗闈㈠姞涓?so鏉ョ‘瀹氬簱鐨勫悕縐?br />l LD_LIBRARY_PATH錛氳繖涓幆澧冨彉閲忔寚紺哄姩鎬佽繛鎺ュ櫒鍙互瑁呰澆鍔ㄦ佸簱鐨勮礬寰勩?br />l 褰撶劧濡傛灉鏈塺oot鏉冮檺鐨勮瘽錛屽彲浠ヤ慨鏀?etc/ld.so.conf鏂囦歡錛岀劧鍚庤皟鐢?/sbin/ldconfig鏉ヨ揪鍒板悓鏍風殑鐩殑錛屼笉榪囧鏋滄病鏈塺oot鏉冮檺錛岄偅涔堝彧鑳介噰鐢ㄨ緭鍑篖D_LIBRARY_PATH鐨勬柟娉曚簡銆?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋">璋冪敤鍔ㄦ佸簱鐨勬椂鍊欐湁鍑犱釜闂浼氱粡甯哥鍒幫紝鏈夋椂錛屾槑鏄庡凡緇忓皢搴撶殑澶存枃浠舵墍鍦ㄧ洰褰?閫氳繃 “-I” include榪涙潵浜嗭紝搴撴墍鍦ㄦ枃浠墮氳繃 “-L”鍙傛暟寮曞錛屽茍鎸囧畾浜?#8220;-l”鐨勫簱鍚嶏紝浣嗛氳繃ldd鍛戒護瀵熺湅鏃訛紝灝辨槸姝繪椿鎵句笉鍒頒綘鎸囧畾閾炬帴鐨剆o鏂囦歡錛岃繖鏃朵綘瑕佷綔鐨勫氨鏄氳繃淇敼 LD_LIBRARY_PATH鎴栬?etc/ld.so.conf鏂囦歡鏉ユ寚瀹氬姩鎬佸簱鐨勭洰褰曘傞氬父榪欐牱鍋氬氨鍙互瑙e喅搴撴棤娉曢摼鎺ョ殑闂浜嗐?br /></span></p><br /> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 瀹嬩綋"><strong>闈欐佸簱閾炬帴鏃舵悳绱㈣礬寰勯『搴忥細</strong></span><br /><br /><span style="font-family: 瀹嬩綋">1. ld浼氬幓鎵綠CC鍛戒護涓殑鍙傛暟-L<br /><br />2. 鍐嶆壘gcc鐨勭幆澧冨彉閲廘IBRARY_PATH<br /><br />3. 鍐嶆壘鍐呭畾鐩綍 /lib /usr/lib /usr/local/lib 榪欐槸褰撳垵compile gcc鏃跺啓鍦ㄧ▼搴忓唴鐨?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><br /></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><strong><span style="font-family: 瀹嬩綋">鍔ㄦ侀摼鎺ユ椂銆佹墽琛屾椂鎼滅儲璺緞欏哄簭:</span></strong></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><br /><span style="font-family: 瀹嬩綋">1.  緙栬瘧鐩爣浠g爜鏃舵寚瀹氱殑鍔ㄦ佸簱鎼滅儲璺緞錛?br /><br />2.  鐜鍙橀噺LD_LIBRARY_PATH鎸囧畾鐨勫姩鎬佸簱鎼滅儲璺緞錛?br /><br />3.  閰嶇疆鏂囦歡/etc/ld.so.conf涓寚瀹氱殑鍔ㄦ佸簱鎼滅儲璺緞錛?br /><br />4. 榛樿鐨勫姩鎬佸簱鎼滅儲璺緞/lib錛?br /><br />5. 榛樿鐨勫姩鎬佸簱鎼滅儲璺緞/usr/lib銆?/span></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><br /></p> <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="font-family: 榛戜綋"><strong>鏈夊叧鐜鍙橀噺錛?/strong></span><br /><br /><span style="font-family: 瀹嬩綋">LIBRARY_PATH鐜鍙橀噺錛氭寚瀹氱▼搴忛潤鎬侀摼鎺ュ簱鏂囦歡鎼滅儲璺緞<br /><br />LD_LIBRARY_PATH鐜鍙橀噺錛氭寚瀹氱▼搴忓姩鎬侀摼鎺ュ簱鏂囦歡鎼滅儲璺緞</span></p></div></span></span><br /><img src ="http://m.shnenglu.com/deane/aggbug/165216.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/deane/" target="_blank">鏉庨槼</a> 2012-02-09 13:43 <a href="http://m.shnenglu.com/deane/articles/165216.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Linux鐜榪涚▼闂撮氫俊 鍏變韓鍐呭瓨錛堜笅錛?/title><link>http://m.shnenglu.com/deane/articles/139057.html</link><dc:creator>鏉庨槼</dc:creator><author>鏉庨槼</author><pubDate>Fri, 21 Jan 2011 12:59:00 GMT</pubDate><guid>http://m.shnenglu.com/deane/articles/139057.html</guid><wfw:comment>http://m.shnenglu.com/deane/comments/139057.html</wfw:comment><comments>http://m.shnenglu.com/deane/articles/139057.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/deane/comments/commentRss/139057.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/deane/services/trackbacks/139057.html</trackback:ping><description><![CDATA[<p><br>緋葷粺璋冪敤mmap()閫氳繃鏄犲皠涓涓櫘閫氭枃浠跺疄鐜板叡浜唴瀛樸傜郴緇烿鍒欐槸閫氳繃鏄犲皠鐗規畩鏂囦歡緋葷粺shm涓殑鏂囦歡瀹炵幇榪涚▼闂寸殑鍏變韓鍐呭瓨閫氫俊銆備篃灝辨槸璇達紝姣忎釜鍏變韓鍐呭瓨鍖哄煙瀵瑰簲鐗規畩鏂囦歡緋葷粺shm涓殑涓涓枃浠訛紙榪欐槸閫氳繃shmid_kernel緇撴瀯鑱旂郴璧鋒潵鐨勶級錛屽悗闈㈣繕灝嗛槓榪般?/p> <p><a name=1><span id="hvzpftn" class=atitle><strong><font size=5>1銆佺郴緇烿鍏變韓鍐呭瓨鍘熺悊</font></strong></span></a></p> <p>榪涚▼闂撮渶瑕佸叡浜殑鏁版嵁琚斁鍦ㄤ竴涓彨鍋欼PC鍏變韓鍐呭瓨鍖哄煙鐨勫湴鏂癸紝鎵鏈夐渶瑕佽闂鍏變韓鍖哄煙鐨勮繘紼嬮兘瑕佹妸璇ュ叡浜尯鍩熸槧灝勫埌鏈繘紼嬬殑鍦板潃絀洪棿涓幓銆傜郴緇烿鍏變韓鍐呭瓨閫氳繃shmget鑾峰緱鎴栧垱寤轟竴涓狪PC鍏變韓鍐呭瓨鍖哄煙錛屽茍榪斿洖鐩稿簲鐨勬爣璇嗙銆傚唴鏍稿湪淇濊瘉shmget鑾峰緱鎴栧垱寤轟竴涓叡浜唴瀛樺尯錛屽垵濮嬪寲璇ュ叡浜唴瀛樺尯鐩稿簲鐨剆hmid_kernel緇撴瀯娉ㄥ悓鏃訛紝榪樺皢鍦ㄧ壒孌婃枃浠剁郴緇焥hm涓紝鍒涘緩騫舵墦寮涓涓悓鍚嶆枃浠訛紝騫跺湪鍐呭瓨涓緩绔嬭搗璇ユ枃浠剁殑鐩稿簲dentry鍙奿node緇撴瀯錛屾柊鎵撳紑鐨勬枃浠朵笉灞炰簬浠諱綍涓涓繘紼嬶紙浠諱綍榪涚▼閮藉彲浠ヨ闂鍏變韓鍐呭瓨鍖猴級銆傛墍鏈夎繖涓鍒囬兘鏄郴緇熻皟鐢╯hmget瀹屾垚鐨勩?/p> <p>娉細姣忎竴涓叡浜唴瀛樺尯閮芥湁涓涓帶鍒剁粨鏋剆truct shmid_kernel錛宻hmid_kernel鏄叡浜唴瀛樺尯鍩熶腑闈炲父閲嶈鐨勪竴涓暟鎹粨鏋勶紝瀹冩槸瀛樺偍綆$悊鍜屾枃浠剁郴緇熺粨鍚堣搗鏉ョ殑妗ユ錛屽畾涔夊涓嬶細</p> <table cellSpacing=0 cellPadding=0 width="70%" border=0> <tbody> <tr> <td class=code-outline> <pre class=displaycode>struct shmid_kernel /* private to the kernel */ { struct kern_ipc_perm shm_perm; struct file * shm_file; int id; unsigned long shm_nattch; unsigned long shm_segsz; time_t shm_atim; time_t shm_dtim; time_t shm_ctim; pid_t shm_cprid; pid_t shm_lprid; }; </pre> </td> </tr> </tbody> </table> <br> <p>璇ョ粨鏋勪腑鏈閲嶈鐨勪竴涓煙搴旇鏄痵hm_file錛屽畠瀛樺偍浜嗗皢琚槧灝勬枃浠剁殑鍦板潃銆傛瘡涓叡浜唴瀛樺尯瀵硅薄閮藉搴旂壒孌婃枃浠剁郴緇焥hm涓殑涓涓枃浠訛紝涓鑸儏鍐典笅錛岀壒孌婃枃浠剁郴緇焥hm涓殑鏂囦歡鏄笉鑳界敤read()銆亀rite()絳夋柟娉曡闂殑錛屽綋閲囧彇鍏變韓鍐呭瓨鐨勬柟寮忔妸鍏朵腑鐨勬枃浠舵槧灝勫埌榪涚▼鍦板潃絀洪棿鍚庯紝鍙洿鎺ラ噰鐢ㄨ闂唴瀛樼殑鏂瑰紡瀵瑰叾璁塊棶銆?/p> <p>榪欓噷鎴戜滑閲囩敤[1]涓殑鍥捐〃緇欏嚭涓庣郴緇烿鍏變韓鍐呭瓨鐩稿叧鏁版嵁緇撴瀯錛?/p> <br><img height=409 alt="" src="http://www.ibm.com/developerworks/cn/linux/l-ipc/part5/image001.jpg" width=580 border=0> <br> <p>姝e娑堟伅闃熷垪鍜屼俊鍙風伅涓鏍鳳紝鍐呮牳閫氳繃鏁版嵁緇撴瀯struct ipc_ids shm_ids緇存姢緋葷粺涓殑鎵鏈夊叡浜唴瀛樺尯鍩熴備笂鍥句腑鐨剆hm_ids.entries鍙橀噺鎸囧悜涓涓猧pc_id緇撴瀯鏁扮粍錛岃屾瘡涓猧pc_id緇撴瀯鏁扮粍涓湁涓寚鍚慿ern_ipc_perm緇撴瀯鐨勬寚閽堛傚埌榪欓噷璇昏呭簲璇ュ緢鐔熸倝浜嗭紝瀵逛簬緋葷粺V鍏變韓鍐呭瓨鍖烘潵璇達紝kern_ipc_perm鐨勫涓繪槸shmid_kernel緇撴瀯錛宻hmid_kernel鏄敤鏉ユ弿榪頒竴涓叡浜唴瀛樺尯鍩熺殑錛岃繖鏍峰唴鏍稿氨鑳藉鎺у埗緋葷粺涓墍鏈夌殑鍏變韓鍖哄煙銆傚悓鏃訛紝鍦╯hmid_kernel緇撴瀯鐨刦ile綾誨瀷鎸囬拡shm_file鎸囧悜鏂囦歡緋葷粺shm涓浉搴旂殑鏂囦歡錛岃繖鏍鳳紝鍏變韓鍐呭瓨鍖哄煙灝變笌shm鏂囦歡緋葷粺涓殑鏂囦歡瀵瑰簲璧鋒潵銆?/p> <p>鍦ㄥ垱寤轟簡涓涓叡浜唴瀛樺尯鍩熷悗錛岃繕瑕佸皢瀹冩槧灝勫埌榪涚▼鍦板潃絀洪棿錛岀郴緇熻皟鐢╯hmat()瀹屾垚姝ら」鍔熻兘銆傜敱浜庡湪璋冪敤shmget()鏃訛紝宸茬粡鍒涘緩浜嗘枃浠剁郴緇焥hm涓殑涓涓悓鍚嶆枃浠朵笌鍏變韓鍐呭瓨鍖哄煙鐩稿搴旓紝鍥犳錛岃皟鐢╯hmat()鐨勮繃紼嬬浉褰撲簬鏄犲皠鏂囦歡緋葷粺shm涓殑鍚屽悕鏂囦歡榪囩▼錛屽師鐞嗕笌mmap()澶у悓灝忓紓銆?/p> <div id="hvzpftn" class=ibm-alternate-rule> <hr> </div> <p class="ibm-ind-link ibm-back-to-top"><a class=ibm-anchor-up-link ><font color=#4c6e94><strong>鍥為〉棣?/strong></font></a></p> <p><a name=2><span id="hvzpftn" class=atitle><strong><font size=5>2銆佺郴緇烿鍏變韓鍐呭瓨API</font></strong></span></a></p> <p>瀵逛簬緋葷粺V鍏變韓鍐呭瓨錛屼富瑕佹湁浠ヤ笅鍑犱釜API錛歴hmget()銆乻hmat()銆乻hmdt()鍙妔hmctl()銆?/p> <table cellSpacing=0 cellPadding=0 width="100%" border=0> <tbody> <tr> <td class=code-outline> <pre class=displaycode>#include <sys/ipc.h> #include <sys/shm.h> </pre> </td> </tr> </tbody> </table> <br> <p>shmget錛堬級鐢ㄦ潵鑾峰緱鍏變韓鍐呭瓨鍖哄煙鐨処D錛屽鏋滀笉瀛樺湪鎸囧畾鐨勫叡浜尯鍩熷氨鍒涘緩鐩稿簲鐨勫尯鍩熴俿hmat()鎶婂叡浜唴瀛樺尯鍩熸槧灝勫埌璋冪敤榪涚▼鐨勫湴鍧絀洪棿涓幓錛岃繖鏍鳳紝榪涚▼灝卞彲浠ユ柟渚垮湴瀵瑰叡浜尯鍩熻繘琛岃闂搷浣溿俿hmdt()璋冪敤鐢ㄦ潵瑙i櫎榪涚▼瀵瑰叡浜唴瀛樺尯鍩熺殑鏄犲皠銆俿hmctl瀹炵幇瀵瑰叡浜唴瀛樺尯鍩熺殑鎺у埗鎿嶄綔銆傝繖閲屾垜浠笉瀵硅繖浜涚郴緇熻皟鐢ㄤ綔鍏蜂綋鐨勪粙緇嶏紝璇昏呭彲鍙傝冪浉搴旂殑鎵嬪唽欏甸潰錛屽悗闈㈢殑鑼冧緥涓皢緇欏嚭瀹冧滑鐨勮皟鐢ㄦ柟娉曘?/p> <p>娉細shmget鐨勫唴閮ㄥ疄鐜板寘鍚簡璁稿閲嶈鐨勭郴緇烿鍏變韓鍐呭瓨鏈哄埗錛泂hmat鍦ㄦ妸鍏變韓鍐呭瓨鍖哄煙鏄犲皠鍒拌繘紼嬬┖闂存椂錛屽茍涓嶇湡姝f敼鍙樿繘紼嬬殑欏佃〃銆傚綋榪涚▼絎竴嬈¤闂唴瀛樻槧灝勫尯鍩熻闂椂錛屼細鍥犱負娌℃湁鐗╃悊欏佃〃鐨勫垎閰嶈屽鑷翠竴涓己欏靛紓甯革紝鐒跺悗鍐呮牳鍐嶆牴鎹浉搴旂殑瀛樺偍綆$悊鏈哄埗涓哄叡浜唴瀛樻槧灝勫尯鍩熷垎閰嶇浉搴旂殑欏佃〃銆?/p> <div id="hvzpftn" class=ibm-alternate-rule> <hr> </div> <p class="ibm-ind-link ibm-back-to-top"><a class=ibm-anchor-up-link ><font color=#4c6e94><strong>鍥為〉棣?/strong></font></a></p> <p><a name=3><span id="hvzpftn" class=atitle><strong><font size=5>3銆佺郴緇烿鍏變韓鍐呭瓨闄愬埗</font></strong></span></a></p> <p>鍦?proc/sys/kernel/鐩綍涓嬶紝璁板綍鐫緋葷粺V鍏變韓鍐呭瓨鐨勪竴涓嬮檺鍒訛紝濡備竴涓叡浜唴瀛樺尯鐨勬渶澶у瓧鑺傛暟shmmax錛岀郴緇熻寖鍥村唴鏈澶у叡浜唴瀛樺尯鏍囪瘑絎︽暟shmmni絳夛紝鍙互鎵嬪伐瀵瑰叾璋冩暣錛屼絾涓嶆帹鑽愯繖鏍峰仛銆?/p> <p>鍦╗2]涓紝緇欏嚭浜嗚繖浜涢檺鍒剁殑嫻嬭瘯鏂規硶錛屼笉鍐嶈禈榪般?/p> <div id="hvzpftn" class=ibm-alternate-rule> <hr> </div> <p class="ibm-ind-link ibm-back-to-top"><a class=ibm-anchor-up-link ><font color=#4c6e94><strong>鍥為〉棣?/strong></font></a></p> <p><a name=4><span id="hvzpftn" class=atitle><strong><font size=5>4銆佺郴緇烿鍏變韓鍐呭瓨鑼冧緥</font></strong></span></a></p> <p>鏈儴鍒嗗皢緇欏嚭緋葷粺V鍏變韓鍐呭瓨API鐨勪嬌鐢ㄦ柟娉曪紝騫跺姣斿垎鏋愮郴緇烿鍏變韓鍐呭瓨鏈哄埗涓巑map()鏄犲皠鏅氭枃浠跺疄鐜板叡浜唴瀛樹箣闂寸殑宸紓錛岄鍏堢粰鍑轟袱涓繘紼嬮氳繃緋葷粺V鍏變韓鍐呭瓨閫氫俊鐨勮寖渚嬶細</p> <table cellSpacing=0 cellPadding=0 width="100%" border=0> <tbody> <tr> <td class=code-outline> <pre class=displaycode>/***** testwrite.c *******/ #include <sys/ipc.h> #include <sys/shm.h> #include <sys/types.h> #include <unistd.h> typedef struct{ char name[4]; int age; } people; main(int argc, char** argv) { int shm_id,i; key_t key; char temp; people *p_map; char* name = "/dev/shm/myshm2"; key = ftok(name,0); if(key==-1) perror("ftok error"); shm_id=shmget(key,4096,IPC_CREAT); if(shm_id==-1) { perror("shmget error"); return; } p_map=(people*)shmat(shm_id,NULL,0); temp='a'; for(i = 0;i<10;i++) { temp+=1; memcpy((*(p_map+i)).name,&temp,1); (*(p_map+i)).age=20+i; } if(shmdt(p_map)==-1) perror(" detach error "); } /********** testread.c ************/ #include <sys/ipc.h> #include <sys/shm.h> #include <sys/types.h> #include <unistd.h> typedef struct{ char name[4]; int age; } people; main(int argc, char** argv) { int shm_id,i; key_t key; people *p_map; char* name = "/dev/shm/myshm2"; key = ftok(name,0); if(key == -1) perror("ftok error"); shm_id = shmget(key,4096,IPC_CREAT); if(shm_id == -1) { perror("shmget error"); return; } p_map = (people*)shmat(shm_id,NULL,0); for(i = 0;i<10;i++) { printf( "name:%s\n",(*(p_map+i)).name ); printf( "age %d\n",(*(p_map+i)).age ); } if(shmdt(p_map) == -1) perror(" detach error "); } </pre> </td> </tr> </tbody> </table> <br> <p>testwrite.c鍒涘緩涓涓郴緇烿鍏變韓鍐呭瓨鍖猴紝騫跺湪鍏朵腑鍐欏叆鏍煎紡鍖栨暟鎹紱testread.c璁塊棶鍚屼竴涓郴緇烿鍏變韓鍐呭瓨鍖猴紝璇誨嚭鍏朵腑鐨勬牸寮忓寲鏁版嵁銆傚垎鍒妸涓や釜紼嬪簭緙栬瘧涓簍estwrite鍙妕estread錛屽厛鍚庢墽琛?/testwrite鍙?/testread 鍒?/testread杈撳嚭緇撴灉濡備笅錛?/p> <table cellSpacing=0 cellPadding=0 width="100%" border=0> <tbody> <tr> <td class=code-outline> <pre class=displaycode>name: b age 20; name: c age 21; name: d age 22; name: e age 23; name: f age 24; name: g age 25; name: h age 26; name: I age 27; name: j age 28; name: k age 29; </pre> </td> </tr> </tbody> </table> <br> <p>閫氳繃瀵硅瘯楠岀粨鏋滃垎鏋愶紝瀵規瘮緋葷粺V涓巑map()鏄犲皠鏅氭枃浠跺疄鐜板叡浜唴瀛橀氫俊錛屽彲浠ュ緱鍑哄涓嬬粨璁猴細</p> <p>1銆?緋葷粺V鍏變韓鍐呭瓨涓殑鏁版嵁錛屼粠鏉ヤ笉鍐欏叆鍒板疄闄呯鐩樻枃浠朵腑鍘伙紱鑰岄氳繃mmap()鏄犲皠鏅氭枃浠跺疄鐜扮殑鍏變韓鍐呭瓨閫氫俊鍙互鎸囧畾浣曟椂灝嗘暟鎹啓鍏ョ鐩樻枃浠朵腑銆傛敞錛氬墠闈㈣鍒幫紝緋葷粺V鍏變韓鍐呭瓨鏈哄埗瀹為檯鏄氳繃鏄犲皠鐗規畩鏂囦歡緋葷粺shm涓殑鏂囦歡瀹炵幇鐨勶紝鏂囦歡緋葷粺shm鐨勫畨瑁呯偣鍦ㄤ氦鎹㈠垎鍖轟笂錛岀郴緇熼噸鏂板紩瀵煎悗錛屾墍鏈夌殑鍐呭閮戒涪澶便?/p> <p>2銆?緋葷粺V鍏變韓鍐呭瓨鏄殢鍐呮牳鎸佺畫鐨勶紝鍗充嬌鎵鏈夎闂叡浜唴瀛樼殑榪涚▼閮藉凡緇忔甯哥粓姝紝鍏變韓鍐呭瓨鍖轟粛鐒跺瓨鍦紙闄ら潪鏄懼紡鍒犻櫎鍏變韓鍐呭瓨錛夛紝鍦ㄥ唴鏍擱噸鏂板紩瀵間箣鍓嶏紝瀵硅鍏變韓鍐呭瓨鍖哄煙鐨勪換浣曟敼鍐欐搷浣滈兘灝嗕竴鐩翠繚鐣欍?/p> <p>3銆?閫氳繃璋冪敤mmap()鏄犲皠鏅氭枃浠惰繘琛岃繘紼嬮棿閫氫俊鏃訛紝涓瀹氳娉ㄦ剰鑰冭檻榪涚▼浣曟椂緇堟瀵歸氫俊鐨勫獎鍝嶃傝岄氳繃緋葷粺V鍏變韓鍐呭瓨瀹炵幇閫氫俊鐨勮繘紼嬪垯涓嶇劧銆傛敞錛氳繖閲屾病鏈夌粰鍑簊hmctl鐨勪嬌鐢ㄨ寖渚嬶紝鍘熺悊涓庢秷鎭槦鍒楀ぇ鍚屽皬寮傘?/p> <div id="hvzpftn" class=ibm-alternate-rule> <hr> </div> <p class="ibm-ind-link ibm-back-to-top"><a class=ibm-anchor-up-link ><font color=#4c6e94><strong>鍥為〉棣?/strong></font></a></p> <p><a name=5><span id="hvzpftn" class=atitle><strong><font size=5>緇撹錛?/font></strong></span></a></p> <p>鍏變韓鍐呭瓨鍏佽涓や釜鎴栧涓繘紼嬪叡浜竴緇欏畾鐨勫瓨鍌ㄥ尯錛屽洜涓烘暟鎹笉闇瑕佹潵鍥炲鍒訛紝鎵浠ユ槸鏈蹇殑涓縐嶈繘紼嬮棿閫氫俊鏈哄埗銆傚叡浜唴瀛樺彲浠ラ氳繃mmap()鏄犲皠鏅氭枃浠訛紙鐗規畩鎯呭喌涓嬭繕鍙互閲囩敤鍖垮悕鏄犲皠錛夋満鍒跺疄鐜幫紝涔熷彲浠ラ氳繃緋葷粺V鍏變韓鍐呭瓨鏈哄埗瀹炵幇銆傚簲鐢ㄦ帴鍙e拰鍘熺悊寰堢畝鍗曪紝鍐呴儴鏈哄埗澶嶆潅銆備負浜嗗疄鐜版洿瀹夊叏閫氫俊錛屽線寰榪樹笌淇″彿鐏瓑鍚屾鏈哄埗鍏卞悓浣跨敤銆?/p> <p>鍏變韓鍐呭瓨娑夊強鍒頒簡瀛樺偍綆$悊浠ュ強鏂囦歡緋葷粺絳夋柟闈㈢殑鐭ヨ瘑錛屾繁鍏ョ悊瑙e叾鍐呴儴鏈哄埗鏈変竴瀹氱殑闅懼害錛屽叧閿繕瑕佺揣绱ф姄浣忓唴鏍鎬嬌鐢ㄧ殑閲嶈鏁版嵁緇撴瀯銆傜郴緇烿鍏變韓鍐呭瓨鏄互鏂囦歡鐨勫艦寮忕粍緇囧湪鐗規畩鏂囦歡緋葷粺shm涓殑銆傞氳繃shmget鍙互鍒涘緩鎴栬幏寰楀叡浜唴瀛樼殑鏍囪瘑絎︺傚彇寰楀叡浜唴瀛樻爣璇嗙鍚庯紝瑕侀氳繃shmat灝嗚繖涓唴瀛樺尯鏄犲皠鍒版湰榪涚▼鐨勮櫄鎷熷湴鍧絀洪棿銆?/p> <!-- CMA ID: 21240 --><!-- Site ID: 10 --><!-- XSLT stylesheet used to transform this file: dw-article-6.0-beta.xsl --><br> <p><a name=resources><span id="hvzpftn" class=atitle><strong><font size=5>鍙傝冭祫鏂?</font></strong></span></a></p> <p>[1] Understanding the Linux Kernel, 2nd Edition, By Daniel P. Bovet, Marco Cesati , 瀵瑰悇涓婚闃愯堪寰楅噸鐐圭獊鍑猴紝鑴夌粶娓呮櫚銆?/p> <p>[2] UNIX緗戠粶緙栫▼絎簩鍗鳳細榪涚▼闂撮氫俊錛屼綔鑰咃細W.Richard Stevens錛岃瘧鑰咃細鏉ㄧ戶寮狅紝娓呭崕澶у鍑虹増紺俱傚mmap()鏈夎緇嗛槓榪般?/p> <p>[3] Linux鍐呮牳婧愪唬鐮佹儏鏅垎鏋愶紙涓婏級錛屾瘺寰鋒搷銆佽儭甯屾槑钁楋紝嫻欐睙澶у鍑虹増紺撅紝緇欏嚭浜唌map()鐩稿叧鐨勬簮浠g爜鍒嗘瀽銆?/p> <p>[4]shmget銆乻hmat銆乻hmctl銆乻hmdt鎵嬪唽</p> <br> <img src ="http://m.shnenglu.com/deane/aggbug/139057.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/deane/" target="_blank">鏉庨槼</a> 2011-01-21 20:59 <a href="http://m.shnenglu.com/deane/articles/139057.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Linux鐜榪涚▼闂撮氫俊 鍏變韓鍐呭瓨錛堜笂錛?/title><link>http://m.shnenglu.com/deane/articles/139056.html</link><dc:creator>鏉庨槼</dc:creator><author>鏉庨槼</author><pubDate>Fri, 21 Jan 2011 12:58:00 GMT</pubDate><guid>http://m.shnenglu.com/deane/articles/139056.html</guid><wfw:comment>http://m.shnenglu.com/deane/comments/139056.html</wfw:comment><comments>http://m.shnenglu.com/deane/articles/139056.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/deane/comments/commentRss/139056.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/deane/services/trackbacks/139056.html</trackback:ping><description><![CDATA[<p><br>閲囩敤鍏變韓鍐呭瓨閫氫俊鐨勪竴涓樉鑰屾槗瑙佺殑濂藉鏄晥鐜囬珮錛屽洜涓鴻繘紼嬪彲浠ョ洿鎺ヨ鍐欏唴瀛橈紝鑰屼笉闇瑕佷換浣曟暟鎹殑鎷瘋礉銆傚浜庡儚綆¢亾鍜屾秷鎭槦鍒楃瓑閫氫俊鏂瑰紡錛屽垯闇瑕佸湪鍐呮牳鍜岀敤鎴風┖闂磋繘琛屽洓嬈$殑鏁版嵁鎷瘋礉錛岃屽叡浜唴瀛樺垯鍙嫹璐濅袱嬈℃暟鎹甗1]錛氫竴嬈′粠杈撳叆鏂囦歡鍒板叡浜唴瀛樺尯錛屽彟涓嬈′粠鍏變韓鍐呭瓨鍖哄埌杈撳嚭鏂囦歡銆傚疄闄呬笂錛岃繘紼嬩箣闂村湪鍏變韓鍐呭瓨鏃訛紝騫朵笉鎬繪槸璇誨啓灝戦噺鏁版嵁鍚庡氨瑙i櫎鏄犲皠錛屾湁鏂扮殑閫氫俊鏃訛紝鍐嶉噸鏂板緩绔嬪叡浜唴瀛樺尯鍩熴傝屾槸淇濇寔鍏變韓鍖哄煙錛岀洿鍒伴氫俊瀹屾瘯涓烘錛岃繖鏍鳳紝鏁版嵁鍐呭涓鐩翠繚瀛樺湪鍏變韓鍐呭瓨涓紝騫舵病鏈夊啓鍥炴枃浠躲傚叡浜唴瀛樹腑鐨勫唴瀹瑰線寰鏄湪瑙i櫎鏄犲皠鏃舵墠鍐欏洖鏂囦歡鐨勩傚洜姝わ紝閲囩敤鍏變韓鍐呭瓨鐨勯氫俊鏂瑰紡鏁堢巼鏄潪甯擱珮鐨勩?/p> <p>Linux鐨?.2.x鍐呮牳鏀寔澶氱鍏變韓鍐呭瓨鏂瑰紡錛屽mmap()緋葷粺璋冪敤錛孭osix鍏變韓鍐呭瓨錛屼互鍙婄郴緇烿鍏變韓鍐呭瓨銆俵inux鍙戣鐗堟湰濡俁edhat 8.0鏀寔mmap()緋葷粺璋冪敤鍙婄郴緇烿鍏變韓鍐呭瓨錛屼絾榪樻病瀹炵幇Posix鍏變韓鍐呭瓨錛屾湰鏂囧皢涓昏浠嬬粛mmap()緋葷粺璋冪敤鍙婄郴緇烿鍏變韓鍐呭瓨API鐨勫師鐞嗗強搴旂敤銆?/p> <p><a name=1><span id="hvzpftn" class=atitle>涓銆佸唴鏍告庢牱淇濊瘉鍚勪釜榪涚▼瀵誨潃鍒板悓涓涓叡浜唴瀛樺尯鍩熺殑鍐呭瓨欏甸潰</span></a></p> <p>1銆乸age cache鍙妔wap cache涓〉闈㈢殑鍖哄垎錛氫竴涓璁塊棶鏂囦歡鐨勭墿鐞嗛〉闈㈤兘椹葷暀鍦╬age cache鎴杝wap cache涓紝涓涓〉闈㈢殑鎵鏈変俊鎭敱struct page鏉ユ弿榪般俿truct page涓湁涓涓煙涓烘寚閽坢apping 錛屽畠鎸囧悜涓涓猻truct address_space綾誨瀷緇撴瀯銆俻age cache鎴杝wap cache涓殑鎵鏈夐〉闈㈠氨鏄牴鎹產ddress_space緇撴瀯浠ュ強涓涓亸縐婚噺鏉ュ尯鍒嗙殑銆?/p> <p>2銆佹枃浠朵笌address_space緇撴瀯鐨勫搴旓細涓涓叿浣撶殑鏂囦歡鍦ㄦ墦寮鍚庯紝鍐呮牳浼氬湪鍐呭瓨涓負涔嬪緩绔嬩竴涓猻truct inode緇撴瀯錛屽叾涓殑i_mapping鍩熸寚鍚戜竴涓猘ddress_space緇撴瀯銆傝繖鏍鳳紝涓涓枃浠跺氨瀵瑰簲涓涓猘ddress_space緇撴瀯錛屼竴涓猘ddress_space涓庝竴涓亸縐婚噺鑳藉紜畾涓涓猵age cache 鎴杝wap cache涓殑涓涓〉闈€傚洜姝わ紝褰撹瀵誨潃鏌愪釜鏁版嵁鏃訛紝寰堝鏄撴牴鎹粰瀹氱殑鏂囦歡鍙婃暟鎹湪鏂囦歡鍐呯殑鍋忕Щ閲忚屾壘鍒扮浉搴旂殑欏甸潰銆?/p> <p>3銆佽繘紼嬭皟鐢╩map()鏃訛紝鍙槸鍦ㄨ繘紼嬬┖闂村唴鏂板浜嗕竴鍧楃浉搴斿ぇ灝忕殑緙撳啿鍖猴紝騫惰緗簡鐩稿簲鐨勮闂爣璇嗭紝浣嗗茍娌℃湁寤虹珛榪涚▼絀洪棿鍒扮墿鐞嗛〉闈㈢殑鏄犲皠銆傚洜姝わ紝絎竴嬈¤闂絀洪棿鏃訛紝浼氬紩鍙戜竴涓己欏靛紓甯搞?/p> <p>4銆佸浜庡叡浜唴瀛樻槧灝勬儏鍐碉紝緙洪〉寮傚父澶勭悊紼嬪簭棣栧厛鍦╯wap cache涓鎵劇洰鏍囬〉錛堢鍚坅ddress_space浠ュ強鍋忕Щ閲忕殑鐗╃悊欏碉級錛屽鏋滄壘鍒幫紝鍒欑洿鎺ヨ繑鍥炲湴鍧錛涘鏋滄病鏈夋壘鍒幫紝鍒欏垽鏂欏墊槸鍚﹀湪浜ゆ崲鍖?swap area)錛屽鏋滃湪錛屽垯鎵ц涓涓崲鍏ユ搷浣滐紱濡傛灉涓婅堪涓ょ鎯呭喌閮戒笉婊¤凍錛屽鐞嗙▼搴忓皢鍒嗛厤鏂扮殑鐗╃悊欏甸潰錛屽茍鎶婂畠鎻掑叆鍒皃age cache涓傝繘紼嬫渶緇堝皢鏇存柊榪涚▼欏佃〃銆?<br>娉細瀵逛簬鏄犲皠鏅氭枃浠舵儏鍐碉紙闈炲叡浜槧灝勶級錛岀己欏靛紓甯稿鐞嗙▼搴忛鍏堜細鍦╬age cache涓牴鎹產ddress_space浠ュ強鏁版嵁鍋忕Щ閲忓鎵劇浉搴旂殑欏甸潰銆傚鏋滄病鏈夋壘鍒幫紝鍒欒鏄庢枃浠舵暟鎹繕娌℃湁璇誨叆鍐呭瓨錛屽鐞嗙▼搴忎細浠庣鐩樿鍏ョ浉搴旂殑欏甸潰錛屽茍榪斿洖鐩稿簲鍦板潃錛屽悓鏃訛紝榪涚▼欏佃〃涔熶細鏇存柊銆?</p> <p>5銆佹墍鏈夎繘紼嬪湪鏄犲皠鍚屼竴涓叡浜唴瀛樺尯鍩熸椂錛屾儏鍐甸兘涓鏍鳳紝鍦ㄥ緩绔嬬嚎鎬у湴鍧涓庣墿鐞嗗湴鍧涔嬮棿鐨勬槧灝勪箣鍚庯紝涓嶈榪涚▼鍚勮嚜鐨勮繑鍥炲湴鍧濡備綍錛屽疄闄呰闂殑蹇呯劧鏄悓涓涓叡浜唴瀛樺尯鍩熷搴旂殑鐗╃悊欏甸潰銆?<br>娉細涓涓叡浜唴瀛樺尯鍩熷彲浠ョ湅浣滄槸鐗規畩鏂囦歡緋葷粺shm涓殑涓涓枃浠訛紝shm鐨勫畨瑁呯偣鍦ㄤ氦鎹㈠尯涓娿?</p> <p>涓婇潰娑夊強鍒頒簡涓浜涙暟鎹粨鏋勶紝鍥寸粫鏁版嵁緇撴瀯鐞嗚В闂浼氬鏄撲竴浜涖?/p> <div id="hvzpftn" class=ibm-alternate-rule> <hr> </div> <p class="ibm-ind-link ibm-back-to-top"><a class=ibm-anchor-up-link ><u><font color=#0000ff>鍥為〉棣?/font></u></a></p> <p><a name=2><span id="hvzpftn" class=atitle>浜屻乵map()鍙婂叾鐩稿叧緋葷粺璋冪敤</span></a></p> <p>mmap()緋葷粺璋冪敤浣垮緱榪涚▼涔嬮棿閫氳繃鏄犲皠鍚屼竴涓櫘閫氭枃浠跺疄鐜板叡浜唴瀛樸傛櫘閫氭枃浠惰鏄犲皠鍒拌繘紼嬪湴鍧絀洪棿鍚庯紝榪涚▼鍙互鍚戣闂櫘閫氬唴瀛樹竴鏍峰鏂囦歡榪涜璁塊棶錛屼笉蹇呭啀璋冪敤read()錛寃rite錛堬級絳夋搷浣溿?/p> <p>娉細瀹為檯涓婏紝mmap()緋葷粺璋冪敤騫朵笉鏄畬鍏ㄤ負浜嗙敤浜庡叡浜唴瀛樿岃璁$殑銆傚畠鏈韓鎻愪緵浜嗕笉鍚屼簬涓鑸鏅氭枃浠剁殑璁塊棶鏂瑰紡錛岃繘紼嬪彲浠ュ儚璇誨啓鍐呭瓨涓鏍峰鏅氭枃浠剁殑鎿嶄綔銆傝孭osix鎴栫郴緇烿鐨勫叡浜唴瀛業PC鍒欑函綺圭敤浜庡叡浜洰鐨勶紝褰撶劧mmap()瀹炵幇鍏變韓鍐呭瓨涔熸槸鍏朵富瑕佸簲鐢ㄤ箣涓銆?/p> <p><a name=N1006A><span id="hvzpftn" class=smalltitle>1銆乵map()緋葷粺璋冪敤褰㈠紡濡備笅錛?/span></a></p> <p>void* mmap ( void * addr , size_t len , int prot , int flags , int fd , off_t offset ) <br>鍙傛暟fd涓哄嵆灝嗘槧灝勫埌榪涚▼絀洪棿鐨勬枃浠舵弿榪板瓧錛屼竴鑸敱open()榪斿洖錛屽悓鏃訛紝fd鍙互鎸囧畾涓?1錛屾鏃墮』鎸囧畾flags鍙傛暟涓殑MAP_ANON錛岃〃鏄庤繘琛岀殑鏄尶鍚嶆槧灝勶紙涓嶆秹鍙婂叿浣撶殑鏂囦歡鍚嶏紝閬垮厤浜嗘枃浠剁殑鍒涘緩鍙婃墦寮錛屽緢鏄劇劧鍙兘鐢ㄤ簬鍏鋒湁浜茬紭鍏崇郴鐨勮繘紼嬮棿閫氫俊錛夈俵en鏄槧灝勫埌璋冪敤榪涚▼鍦板潃絀洪棿鐨勫瓧鑺傛暟錛屽畠浠庤鏄犲皠鏂囦歡寮澶磑ffset涓瓧鑺傚紑濮嬬畻璧楓俻rot 鍙傛暟鎸囧畾鍏變韓鍐呭瓨鐨勮闂潈闄愩傚彲鍙栧涓嬪嚑涓肩殑鎴栵細PROT_READ錛堝彲璇伙級 , PROT_WRITE 錛堝彲鍐欙級, PROT_EXEC 錛堝彲鎵ц錛? PROT_NONE錛堜笉鍙闂級銆俧lags鐢變互涓嬪嚑涓父鍊兼寚瀹氾細MAP_SHARED , MAP_PRIVATE , MAP_FIXED錛屽叾涓紝MAP_SHARED , MAP_PRIVATE蹇呴夊叾涓錛岃孧AP_FIXED鍒欎笉鎺ㄨ崘浣跨敤銆俹ffset鍙傛暟涓鑸涓?錛岃〃紺轟粠鏂囦歡澶村紑濮嬫槧灝勩傚弬鏁癮ddr鎸囧畾鏂囦歡搴旇鏄犲皠鍒拌繘紼嬬┖闂寸殑璧峰鍦板潃錛屼竴鑸鎸囧畾涓涓┖鎸囬拡錛屾鏃墮夋嫨璧峰鍦板潃鐨勪換鍔$暀緇欏唴鏍告潵瀹屾垚銆傚嚱鏁扮殑榪斿洖鍊間負鏈鍚庢枃浠舵槧灝勫埌榪涚▼絀洪棿鐨勫湴鍧錛岃繘紼嬪彲鐩存帴鎿嶄綔璧峰鍦板潃涓鴻鍊肩殑鏈夋晥鍦板潃銆傝繖閲屼笉鍐嶈緇嗕粙緇峬map()鐨勫弬鏁幫紝璇昏呭彲鍙傝僲map()鎵嬪唽欏佃幏寰楄繘涓姝ョ殑淇℃伅銆?</p> <p><a name=N10074><span id="hvzpftn" class=smalltitle>2銆佺郴緇熻皟鐢╩map()鐢ㄤ簬鍏變韓鍐呭瓨鐨勪袱縐嶆柟寮忥細</span></a></p> <p>錛?錛変嬌鐢ㄦ櫘閫氭枃浠舵彁渚涚殑鍐呭瓨鏄犲皠錛氶傜敤浜庝換浣曡繘紼嬩箣闂達紱姝ゆ椂錛岄渶瑕佹墦寮鎴栧垱寤轟竴涓枃浠訛紝鐒跺悗鍐嶈皟鐢╩map()錛涘吀鍨嬭皟鐢ㄤ唬鐮佸涓嬶細 </p> <table cellSpacing=0 cellPadding=0 width="100%" border=0> <tbody> <tr> <td class=code-outline> <pre class=displaycode> fd=open(name, flag, mode); if(fd<0) ... </pre> </td> </tr> </tbody> </table> <br> <p>ptr=mmap(NULL, len , PROT_READ|PROT_WRITE, MAP_SHARED , fd , 0); 閫氳繃mmap()瀹炵幇鍏變韓鍐呭瓨鐨勯氫俊鏂瑰紡鏈夎澶氱壒鐐瑰拰瑕佹敞鎰忕殑鍦版柟錛屾垜浠皢鍦ㄨ寖渚嬩腑榪涜鍏蜂綋璇存槑銆?</p> <p>錛?錛変嬌鐢ㄧ壒孌婃枃浠舵彁渚涘尶鍚嶅唴瀛樻槧灝勶細閫傜敤浜庡叿鏈変翰緙樺叧緋葷殑榪涚▼涔嬮棿錛涚敱浜庣埗瀛愯繘紼嬬壒孌婄殑浜茬紭鍏崇郴錛屽湪鐖惰繘紼嬩腑鍏堣皟鐢╩map()錛岀劧鍚庤皟鐢╢ork()銆傞偅涔堝湪璋冪敤fork()涔嬪悗錛屽瓙榪涚▼緇ф壙鐖惰繘紼嬪尶鍚嶆槧灝勫悗鐨勫湴鍧絀洪棿錛屽悓鏍蜂篃緇ф壙mmap()榪斿洖鐨勫湴鍧錛岃繖鏍鳳紝鐖跺瓙榪涚▼灝卞彲浠ラ氳繃鏄犲皠鍖哄煙榪涜閫氫俊浜嗐傛敞鎰忥紝榪欓噷涓嶆槸涓鑸殑緇ф壙鍏崇郴銆備竴鑸潵璇達紝瀛愯繘紼嬪崟鐙淮鎶や粠鐖惰繘紼嬬戶鎵夸笅鏉ョ殑涓浜涘彉閲忋傝宮map()榪斿洖鐨勫湴鍧錛屽嵈鐢辯埗瀛愯繘紼嬪叡鍚岀淮鎶ゃ?<br>瀵逛簬鍏鋒湁浜茬紭鍏崇郴鐨勮繘紼嬪疄鐜板叡浜唴瀛樻渶濂界殑鏂瑰紡搴旇鏄噰鐢ㄥ尶鍚嶅唴瀛樻槧灝勭殑鏂瑰紡銆傛鏃訛紝涓嶅繀鎸囧畾鍏蜂綋鐨勬枃浠訛紝鍙璁劇疆鐩稿簲鐨勬爣蹇楀嵆鍙紝鍙傝鑼冧緥2銆?</p> <p><a name=N10089><span id="hvzpftn" class=smalltitle>3銆佺郴緇熻皟鐢╩unmap()</span></a></p> <p>int munmap( void * addr, size_t len ) <br>璇ヨ皟鐢ㄥ湪榪涚▼鍦板潃絀洪棿涓В闄や竴涓槧灝勫叧緋伙紝addr鏄皟鐢╩map()鏃惰繑鍥炵殑鍦板潃錛宭en鏄槧灝勫尯鐨勫ぇ灝忋傚綋鏄犲皠鍏崇郴瑙i櫎鍚庯紝瀵瑰師鏉ユ槧灝勫湴鍧鐨勮闂皢瀵艱嚧孌甸敊璇彂鐢熴?</p> <p><a name=N10093><span id="hvzpftn" class=smalltitle>4銆佺郴緇熻皟鐢╩sync()</span></a></p> <p>int msync ( void * addr , size_t len, int flags) <br>涓鑸鏉ワ紝榪涚▼鍦ㄦ槧灝勭┖闂寸殑瀵瑰叡浜唴瀹圭殑鏀瑰彉騫朵笉鐩存帴鍐欏洖鍒扮鐩樻枃浠朵腑錛屽線寰鍦ㄨ皟鐢╩unmap錛堬級鍚庢墠鎵ц璇ユ搷浣溿傚彲浠ラ氳繃璋冪敤msync()瀹炵幇紓佺洏涓婃枃浠跺唴瀹逛笌鍏變韓鍐呭瓨鍖虹殑鍐呭涓鑷淬?</p> <div id="hvzpftn" class=ibm-alternate-rule> <hr> </div> <p class="ibm-ind-link ibm-back-to-top"><a class=ibm-anchor-up-link ><u><font color=#0000ff>鍥為〉棣?/font></u></a></p> <p><a name=3><span id="hvzpftn" class=atitle>涓夈乵map()鑼冧緥</span></a></p> <p>涓嬮潰灝嗙粰鍑轟嬌鐢╩map()鐨勪袱涓寖渚嬶細鑼冧緥1緇欏嚭涓や釜榪涚▼閫氳繃鏄犲皠鏅氭枃浠跺疄鐜板叡浜唴瀛橀氫俊錛涜寖渚?緇欏嚭鐖跺瓙榪涚▼閫氳繃鍖垮悕鏄犲皠瀹炵幇鍏變韓鍐呭瓨銆傜郴緇熻皟鐢╩map()鏈夎澶氭湁瓚g殑鍦版柟錛屼笅闈㈡槸閫氳繃mmap錛堬級鏄犲皠鏅氭枃浠跺疄鐜拌繘紼嬮棿鐨勯氫俊鐨勮寖渚嬶紝鎴戜滑閫氳繃璇ヨ寖渚嬫潵璇存槑mmap()瀹炵幇鍏變韓鍐呭瓨鐨勭壒鐐瑰強娉ㄦ剰浜嬮」銆?/p> <p><a name=N100A5><span id="hvzpftn" class=smalltitle>鑼冧緥1錛氫袱涓繘紼嬮氳繃鏄犲皠鏅氭枃浠跺疄鐜板叡浜唴瀛橀氫俊</span></a></p> <p>鑼冧緥1鍖呭惈涓や釜瀛愮▼搴忥細map_normalfile1.c鍙妋ap_normalfile2.c銆傜紪璇戜袱涓▼搴忥紝鍙墽琛屾枃浠跺垎鍒負map_normalfile1鍙妋ap_normalfile2銆備袱涓▼搴忛氳繃鍛戒護琛屽弬鏁版寚瀹氬悓涓涓枃浠舵潵瀹炵幇鍏變韓鍐呭瓨鏂瑰紡鐨勮繘紼嬮棿閫氫俊銆俶ap_normalfile2璇曞浘鎵撳紑鍛戒護琛屽弬鏁版寚瀹氱殑涓涓櫘閫氭枃浠訛紝鎶婅鏂囦歡鏄犲皠鍒拌繘紼嬬殑鍦板潃絀洪棿錛屽茍瀵規槧灝勫悗鐨勫湴鍧絀洪棿榪涜鍐欐搷浣溿俶ap_normalfile1鎶婂懡浠よ鍙傛暟鎸囧畾鐨勬枃浠舵槧灝勫埌榪涚▼鍦板潃絀洪棿錛岀劧鍚庡鏄犲皠鍚庣殑鍦板潃絀洪棿鎵ц璇繪搷浣溿傝繖鏍鳳紝涓や釜榪涚▼閫氳繃鍛戒護琛屽弬鏁版寚瀹氬悓涓涓枃浠舵潵瀹炵幇鍏變韓鍐呭瓨鏂瑰紡鐨勮繘紼嬮棿閫氫俊銆?/p> <p>涓嬮潰鏄袱涓▼搴忎唬鐮侊細</p> <table cellSpacing=0 cellPadding=0 width="100%" border=0> <tbody> <tr> <td class=code-outline> <pre class=displaycode>/*-------------map_normalfile1.c-----------*/ #include <sys/mman.h> #include <sys/types.h> #include <fcntl.h> #include <unistd.h> typedef struct{ char name[4]; int age; }people; main(int argc, char** argv) // map a normal file as shared mem: { int fd,i; people *p_map; char temp; fd=open(argv[1],O_CREAT|O_RDWR|O_TRUNC,00777); lseek(fd,sizeof(people)*5-1,SEEK_SET); write(fd,"",1); p_map = (people*) mmap( NULL,sizeof(people)*10,PROT_READ|PROT_WRITE, MAP_SHARED,fd,0 ); close( fd ); temp = 'a'; for(i=0; i<10; i++) { temp += 1; memcpy( ( *(p_map+i) ).name, &temp,2 ); ( *(p_map+i) ).age = 20+i; } printf(" initialize over \n ")錛? sleep(10); munmap( p_map, sizeof(people)*10 ); printf( "umap ok \n" ); } /*-------------map_normalfile2.c-----------*/ #include <sys/mman.h> #include <sys/types.h> #include <fcntl.h> #include <unistd.h> typedef struct{ char name[4]; int age; }people; main(int argc, char** argv) // map a normal file as shared mem: { int fd,i; people *p_map; fd=open( argv[1],O_CREAT|O_RDWR,00777 ); p_map = (people*)mmap(NULL,sizeof(people)*10,PROT_READ|PROT_WRITE, MAP_SHARED,fd,0); for(i = 0;i<10;i++) { printf( "name: %s age %d;\n",(*(p_map+i)).name, (*(p_map+i)).age ); } munmap( p_map,sizeof(people)*10 ); } </pre> </td> </tr> </tbody> </table> <br> <p>map_normalfile1.c棣栧厛瀹氫箟浜嗕竴涓猵eople鏁版嵁緇撴瀯錛岋紙鍦ㄨ繖閲岄噰鐢ㄦ暟鎹粨鏋勭殑鏂瑰紡鏄洜涓猴紝鍏變韓鍐呭瓨鍖虹殑鏁版嵁寰寰鏄湁鍥哄畾鏍煎紡鐨勶紝榪欑敱閫氫俊鐨勫悇涓繘紼嬪喅瀹氾紝閲囩敤緇撴瀯鐨勬柟寮忔湁鏅亶浠h〃鎬э級銆俶ap_normfile1棣栧厛鎵撳紑鎴栧垱寤轟竴涓枃浠訛紝騫舵妸鏂囦歡鐨勯暱搴﹁緗負5涓猵eople緇撴瀯澶у皬銆傜劧鍚庝粠mmap()鐨勮繑鍥炲湴鍧寮濮嬶紝璁劇疆浜?0涓猵eople緇撴瀯銆傜劧鍚庯紝榪涚▼鐫$湢10縐掗挓錛岀瓑寰呭叾浠栬繘紼嬫槧灝勫悓涓涓枃浠訛紝鏈鍚庤В闄ゆ槧灝勩?/p> <p>map_normfile2.c鍙槸綆鍗曠殑鏄犲皠涓涓枃浠訛紝騫朵互people鏁版嵁緇撴瀯鐨勬牸寮忎粠mmap()榪斿洖鐨勫湴鍧澶勮鍙?0涓猵eople緇撴瀯錛屽茍杈撳嚭璇誨彇鐨勫鹼紝鐒跺悗瑙i櫎鏄犲皠銆?/p> <p>鍒嗗埆鎶婁袱涓▼搴忕紪璇戞垚鍙墽琛屾枃浠秏ap_normalfile1鍜宮ap_normalfile2鍚庯紝鍦ㄤ竴涓粓绔笂鍏堣繍琛?/map_normalfile2 /tmp/test_shm錛岀▼搴忚緭鍑虹粨鏋滃涓嬶細</p> <table cellSpacing=0 cellPadding=0 width="100%" border=0> <tbody> <tr> <td class=code-outline> <pre class=displaycode>initialize over umap ok </pre> </td> </tr> </tbody> </table> <br> <p>鍦╩ap_normalfile1杈撳嚭initialize over 涔嬪悗錛岃緭鍑簎map ok涔嬪墠錛屽湪鍙︿竴涓粓绔笂榪愯map_normalfile2 /tmp/test_shm錛屽皢浼氫駭鐢熷涓嬭緭鍑?涓轟簡鑺傜渷絀洪棿錛岃緭鍑虹粨鏋滀負紼嶄綔鏁寸悊鍚庣殑緇撴灉)錛?/p> <table cellSpacing=0 cellPadding=0 width="100%" border=0> <tbody> <tr> <td class=code-outline> <pre class=displaycode>name: b age 20; name: c age 21; name: d age 22; name: e age 23; name: f age 24; name: g age 25; name: h age 26; name: I age 27; name: j age 28; name: k age 29; </pre> </td> </tr> </tbody> </table> <br> <p>鍦╩ap_normalfile1 杈撳嚭umap ok鍚庯紝榪愯map_normalfile2鍒欒緭鍑哄涓嬬粨鏋滐細</p> <table cellSpacing=0 cellPadding=0 width="100%" border=0> <tbody> <tr> <td class=code-outline> <pre class=displaycode>name: b age 20; name: c age 21; name: d age 22; name: e age 23; name: f age 24; name: age 0; name: age 0; name: age 0; name: age 0; name: age 0; </pre> </td> </tr> </tbody> </table> <br> <p><strong>浠庣▼搴忕殑榪愯緇撴灉涓彲浠ュ緱鍑虹殑緇撹</strong> </p> <p>1銆?鏈緇堣鏄犲皠鏂囦歡鐨勫唴瀹圭殑闀垮害涓嶄細瓚呰繃鏂囦歡鏈韓鐨勫垵濮嬪ぇ灝忥紝鍗蟲槧灝勪笉鑳芥敼鍙樻枃浠剁殑澶у皬錛?/p> <p>2銆?鍙互鐢ㄤ簬榪涚▼閫氫俊鐨勬湁鏁堝湴鍧絀洪棿澶у皬澶т綋涓婂彈闄愪簬琚槧灝勬枃浠剁殑澶у皬錛屼絾涓嶅畬鍏ㄥ彈闄愪簬鏂囦歡澶у皬銆傛墦寮鏂囦歡琚埅鐭負5涓猵eople緇撴瀯澶у皬錛岃屽湪map_normalfile1涓垵濮嬪寲浜?0涓猵eople鏁版嵁緇撴瀯錛屽湪鎭板綋鏃跺欙紙map_normalfile1杈撳嚭initialize over 涔嬪悗錛岃緭鍑簎map ok涔嬪墠錛夎皟鐢╩ap_normalfile2浼氬彂鐜癿ap_normalfile2灝嗚緭鍑哄叏閮?0涓猵eople緇撴瀯鐨勫鹼紝鍚庨潰灝嗙粰鍑鴻緇嗚璁恒?<br>娉細鍦╨inux涓紝鍐呭瓨鐨勪繚鎶ゆ槸浠ラ〉涓哄熀鏈崟浣嶇殑錛屽嵆浣胯鏄犲皠鏂囦歡鍙湁涓涓瓧鑺傚ぇ灝忥紝鍐呮牳涔熶細涓烘槧灝勫垎閰嶄竴涓〉闈㈠ぇ灝忕殑鍐呭瓨銆傚綋琚槧灝勬枃浠跺皬浜庝竴涓〉闈㈠ぇ灝忔椂錛岃繘紼嬪彲浠ュ浠巑map()榪斿洖鍦板潃寮濮嬬殑涓涓〉闈㈠ぇ灝忚繘琛岃闂紝鑰屼笉浼氬嚭閿欙紱浣嗘槸錛屽鏋滃涓涓〉闈互澶栫殑鍦板潃絀洪棿榪涜璁塊棶錛屽垯瀵艱嚧閿欒鍙戠敓錛屽悗闈㈠皢榪涗竴姝ユ弿榪般傚洜姝わ紝鍙敤浜庤繘紼嬮棿閫氫俊鐨勬湁鏁堝湴鍧絀洪棿澶у皬涓嶄細瓚呰繃鏂囦歡澶у皬鍙婁竴涓〉闈㈠ぇ灝忕殑鍜屻?</p> <p>3銆?鏂囦歡涓鏃﹁鏄犲皠鍚庯紝璋冪敤mmap()鐨勮繘紼嬪榪斿洖鍦板潃鐨勮闂槸瀵規煇涓鍐呭瓨鍖哄煙鐨勮闂紝鏆傛椂鑴辯浜嗙鐩樹笂鏂囦歡鐨勫獎鍝嶃傛墍鏈夊mmap()榪斿洖鍦板潃絀洪棿鐨勬搷浣滃彧鍦ㄥ唴瀛樹腑鏈夋剰涔夛紝鍙湁鍦ㄨ皟鐢ㄤ簡munmap()鍚庢垨鑰卪sync()鏃訛紝鎵嶆妸鍐呭瓨涓殑鐩稿簲鍐呭鍐欏洖紓佺洏鏂囦歡錛屾墍鍐欏唴瀹逛粛鐒朵笉鑳借秴榪囨枃浠剁殑澶у皬銆?/p> <p><a name=N100E0><span id="hvzpftn" class=smalltitle>鑼冧緥2錛氱埗瀛愯繘紼嬮氳繃鍖垮悕鏄犲皠瀹炵幇鍏變韓鍐呭瓨</span></a></p> <table cellSpacing=0 cellPadding=0 width="100%" border=0> <tbody> <tr> <td class=code-outline> <pre class=displaycode>#include <sys/mman.h> #include <sys/types.h> #include <fcntl.h> #include <unistd.h> typedef struct{ char name[4]; int age; }people; main(int argc, char** argv) { int i; people *p_map; char temp; p_map=(people*)mmap(NULL,sizeof(people)*10,PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS,-1,0); if(fork() == 0) { sleep(2); for(i = 0;i<5;i++) printf("child read: the %d people's age is %d\n",i+1,(*(p_map+i)).age); (*p_map).age = 100; munmap(p_map,sizeof(people)*10); //瀹為檯涓婏紝榪涚▼緇堟鏃訛紝浼氳嚜鍔ㄨВ闄ゆ槧灝勩? exit(); } temp = 'a'; for(i = 0;i<5;i++) { temp += 1; memcpy((*(p_map+i)).name, &temp,2); (*(p_map+i)).age=20+i; } sleep(5); printf( "parent read: the first people,s age is %d\n",(*p_map).age ); printf("umap\n"); munmap( p_map,sizeof(people)*10 ); printf( "umap ok\n" ); } </pre> </td> </tr> </tbody> </table> <br> <p>鑰冨療紼嬪簭鐨勮緭鍑虹粨鏋滐紝浣撲細鐖跺瓙榪涚▼鍖垮悕鍏變韓鍐呭瓨錛?/p> <table cellSpacing=0 cellPadding=0 width="100%" border=0> <tbody> <tr> <td class=code-outline> <pre class=displaycode>child read: the 1 people's age is 20 child read: the 2 people's age is 21 child read: the 3 people's age is 22 child read: the 4 people's age is 23 child read: the 5 people's age is 24 parent read: the first people,s age is 100 umap umap ok </pre> </td> </tr> </tbody> </table> <br> <div id="hvzpftn" class=ibm-alternate-rule> <hr> </div> <p class="ibm-ind-link ibm-back-to-top"><a class=ibm-anchor-up-link ><u><font color=#0000ff>鍥為〉棣?/font></u></a></p> <p><a name=4><span id="hvzpftn" class=atitle>鍥涖佸mmap()榪斿洖鍦板潃鐨勮闂?/span></a></p> <p>鍓嶉潰瀵硅寖渚嬭繍琛岀粨鏋勭殑璁ㄨ涓凡緇忔彁鍒幫紝linux閲囩敤鐨勬槸欏靛紡綆$悊鏈哄埗銆傚浜庣敤mmap()鏄犲皠鏅氭枃浠舵潵璇達紝榪涚▼浼氬湪鑷繁鐨勫湴鍧絀洪棿鏂板涓鍧楃┖闂達紝絀洪棿澶у皬鐢眒map()鐨刲en鍙傛暟鎸囧畾錛屾敞鎰忥紝榪涚▼騫朵笉涓瀹氳兘澶熷鍏ㄩ儴鏂板絀洪棿閮借兘榪涜鏈夋晥璁塊棶銆傝繘紼嬭兘澶熻闂殑鏈夋晥鍦板潃澶у皬鍙栧喅浜庢枃浠惰鏄犲皠閮ㄥ垎鐨勫ぇ灝忋傜畝鍗曠殑璇達紝鑳藉瀹圭撼鏂囦歡琚槧灝勯儴鍒嗗ぇ灝忕殑鏈灝戦〉闈釜鏁板喅瀹氫簡榪涚▼浠巑map()榪斿洖鐨勫湴鍧寮濮嬶紝鑳藉鏈夋晥璁塊棶鐨勫湴鍧絀洪棿澶у皬銆傝秴榪囪繖涓┖闂村ぇ灝忥紝鍐呮牳浼氭牴鎹秴榪囩殑涓ラ噸紼嬪害榪斿洖鍙戦佷笉鍚岀殑淇″彿緇欒繘紼嬨傚彲鐢ㄥ涓嬪浘紺鴻鏄庯細</p> <br><img height=169 alt="鍥?1" src="http://www.ibm.com/developerworks/cn/linux/l-ipc/part5/image001.gif" width=580 border=0> <br> <p>娉ㄦ剰錛氭枃浠惰鏄犲皠閮ㄥ垎鑰屼笉鏄暣涓枃浠跺喅瀹氫簡榪涚▼鑳藉璁塊棶鐨勭┖闂村ぇ灝忥紝鍙﹀錛屽鏋滄寚瀹氭枃浠剁殑鍋忕Щ閮ㄥ垎錛屼竴瀹氳娉ㄦ剰涓洪〉闈㈠ぇ灝忕殑鏁存暟鍊嶃備笅闈㈡槸瀵硅繘紼嬫槧灝勫湴鍧絀洪棿鐨勮闂寖渚嬶細</p> <table cellSpacing=0 cellPadding=0 width="100%" border=0> <tbody> <tr> <td class=code-outline> <pre class=displaycode>#include <sys/mman.h> #include <sys/types.h> #include <fcntl.h> #include <unistd.h> typedef struct{ char name[4]; int age; }people; main(int argc, char** argv) { int fd,i; int pagesize,offset; people *p_map; pagesize = sysconf(_SC_PAGESIZE); printf("pagesize is %d\n",pagesize); fd = open(argv[1],O_CREAT|O_RDWR|O_TRUNC,00777); lseek(fd,pagesize*2-100,SEEK_SET); write(fd,"",1); offset = 0; //姝ゅoffset = 0緙栬瘧鎴愮増鏈?錛沷ffset = pagesize緙栬瘧鎴愮増鏈? p_map = (people*)mmap(NULL,pagesize*3,PROT_READ|PROT_WRITE,MAP_SHARED,fd,offset); close(fd); for(i = 1; i<10; i++) { (*(p_map+pagesize/sizeof(people)*i-2)).age = 100; printf("access page %d over\n",i); (*(p_map+pagesize/sizeof(people)*i-1)).age = 100; printf("access page %d edge over, now begin to access page %d\n",i, i+1); (*(p_map+pagesize/sizeof(people)*i)).age = 100; printf("access page %d over\n",i+1); } munmap(p_map,sizeof(people)*10); } </pre> </td> </tr> </tbody> </table> <br> <p>濡傜▼搴忎腑鎵娉ㄩ噴鐨勯偅鏍鳳紝鎶婄▼搴忕紪璇戞垚涓や釜鐗堟湰錛屼袱涓増鏈富瑕佷綋鐜板湪鏂囦歡琚槧灝勯儴鍒嗙殑澶у皬涓嶅悓銆傛枃浠剁殑澶у皬浠嬩簬涓涓〉闈笌涓や釜欏甸潰涔嬮棿錛堝ぇ灝忎負錛歱agesize*2-99錛夛紝鐗堟湰1鐨勮鏄犲皠閮ㄥ垎鏄暣涓枃浠訛紝鐗堟湰2鐨勬枃浠惰鏄犲皠閮ㄥ垎鏄枃浠跺ぇ灝忓噺鍘諱竴涓〉闈㈠悗鐨勫墿浣欓儴鍒嗭紝涓嶅埌涓涓〉闈㈠ぇ灝?澶у皬涓猴細pagesize-99)銆傜▼搴忎腑璇曞浘璁塊棶姣忎竴涓〉闈㈣竟鐣岋紝涓や釜鐗堟湰閮借瘯鍥懼湪榪涚▼絀洪棿涓槧灝刾agesize*3鐨勫瓧鑺傛暟銆?/p> <p>鐗堟湰1鐨勮緭鍑虹粨鏋滃涓嬶細</p> <table cellSpacing=0 cellPadding=0 width="100%" border=0> <tbody> <tr> <td class=code-outline> <pre class=displaycode>pagesize is 4096 access page 1 over access page 1 edge over, now begin to access page 2 access page 2 over access page 2 over access page 2 edge over, now begin to access page 3 Bus error //琚槧灝勬枃浠跺湪榪涚▼絀洪棿涓鐩栦簡涓や釜欏甸潰錛屾鏃訛紝榪涚▼璇曞浘璁塊棶絎笁涓〉闈? </pre> </td> </tr> </tbody> </table> <br> <p>鐗堟湰2鐨勮緭鍑虹粨鏋滃涓嬶細</p> <table cellSpacing=0 cellPadding=0 width="100%" border=0> <tbody> <tr> <td class=code-outline> <pre class=displaycode>pagesize is 4096 access page 1 over access page 1 edge over, now begin to access page 2 Bus error //琚槧灝勬枃浠跺湪榪涚▼絀洪棿涓鐩栦簡涓涓〉闈紝姝ゆ椂錛岃繘紼嬭瘯鍥捐闂浜屼釜欏甸潰 </pre> </td> </tr> </tbody> </table> <br> <p>緇撹錛氶噰鐢ㄧ郴緇熻皟鐢╩map()瀹炵幇榪涚▼闂撮氫俊鏄緢鏂逛究鐨勶紝鍦ㄥ簲鐢ㄥ眰涓婃帴鍙i潪甯哥畝媧併傚唴閮ㄥ疄鐜版満鍒跺尯娑夊強鍒頒簡linux瀛樺偍綆$悊浠ュ強鏂囦歡緋葷粺絳夋柟闈㈢殑鍐呭錛屽彲浠ュ弬鑰冧竴涓嬬浉鍏抽噸瑕佹暟鎹粨鏋勬潵鍔犳繁鐞嗚В銆傚湪鏈笓棰樼殑鍚庨潰閮ㄥ垎錛屽皢浠嬬粛緋葷粺v鍏變韓鍐呭瓨鐨勫疄鐜般?/p> <!-- CMA ID: 22175 --><!-- Site ID: 10 --><!-- XSLT stylesheet used to transform this file: dw-article-6.0-beta.xsl --><br> <p><a name=resources><span id="hvzpftn" class=atitle>鍙傝冭祫鏂?</span></a></p> <p>[1] Understanding the Linux Kernel, 2nd Edition, By Daniel P. Bovet, Marco Cesati , 瀵瑰悇涓婚闃愯堪寰楅噸鐐圭獊鍑猴紝鑴夌粶娓呮櫚銆?/p> <p>[2] UNIX緗戠粶緙栫▼絎簩鍗鳳細榪涚▼闂撮氫俊錛屼綔鑰咃細W.Richard Stevens錛岃瘧鑰咃細鏉ㄧ戶寮狅紝娓呭崕澶у鍑虹増紺俱傚mmap()鏈夎緇嗛槓榪般?/p> <p>[3] Linux鍐呮牳婧愪唬鐮佹儏鏅垎鏋愶紙涓婏級錛屾瘺寰鋒搷銆佽儭甯屾槑钁楋紝嫻欐睙澶у鍑虹増紺撅紝緇欏嚭浜唌map()鐩稿叧鐨勬簮浠g爜鍒嗘瀽銆?/p> <p>[4]mmap()鎵嬪唽<br></p> <img src ="http://m.shnenglu.com/deane/aggbug/139056.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/deane/" target="_blank">鏉庨槼</a> 2011-01-21 20:58 <a href="http://m.shnenglu.com/deane/articles/139056.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>shmathttp://m.shnenglu.com/deane/articles/139048.html鏉庨槼鏉庨槼Fri, 21 Jan 2011 09:31:00 GMThttp://m.shnenglu.com/deane/articles/139048.htmlhttp://m.shnenglu.com/deane/comments/139048.htmlhttp://m.shnenglu.com/deane/articles/139048.html#Feedback0http://m.shnenglu.com/deane/comments/commentRss/139048.htmlhttp://m.shnenglu.com/deane/services/trackbacks/139048.html

銆銆浣滅敤:鍏變韓鍐呭瓨鍖哄璞℃槧灝勫埌璋冪敤榪涚▼鐨勫湴鍧絀洪棿

銆銆鏍稿績澶勭悊鍑芥暟錛?void *shmat( int shmid , char *shmaddr , int shmflag );shmat()鏄敤鏉ュ厑璁告湰榪涚▼璁塊棶涓鍧楀叡浜唴瀛樼殑鍑芥暟銆?
銆銆int shmid鏄偅鍧楀叡浜唴瀛樼殑ID銆?
銆銆char *shmaddr鏄叡浜唴瀛樼殑璧峰鍦板潃
銆銆int shmflag鏄湰榪涚▼瀵硅鍐呭瓨鐨勬搷浣滄ā寮忋傚鏋滄槸SHM_RDONLY鐨勮瘽錛屽氨鏄彧璇繪ā寮忋傚叾瀹冪殑鏄鍐欐ā寮?
銆銆鎴愬姛鏃訛紝榪欎釜鍑芥暟榪斿洖鍏變韓鍐呭瓨鐨勮搗濮嬪湴鍧銆傚け璐ユ椂榪斿洖-1
銆銆鏈榪戠敤鍒板唴瀛樺叡浜紝鏀墮泦鏁寸悊浜嗕簺璧勬枡錛屽仛浜嗕釜綆鍗曠殑瀵規瘮
  mmap緋葷粺璋冪敤 緋葷粺V鍏變韓鍐呭瓨
鑾峰彇鍏變韓
銆銆鍐呭瓨ID
#include <sys/mman.h>
銆銆fd=open(name ,flag,mode);
銆銆if(fd<0)
銆銆….
#include <sys/ipc.h>
銆銆#include <sys/shm.h>
銆銆int shmget(key_t key, size_t size, int shmflg);
鏄犲皠鍐呭瓨 ptr=mmap(NULL,len, PROT_READ|PROT_WRITE, 
銆銆MAP_SHARED , fd , 0); 
void *shmat( int shmid , char *shmaddr , int shmflag );
瑙i櫎鏄犲皠 int munmap( void * addr, size_t len ) ; int shmdt( char *shmaddr );
銆銆浣胯繘紼嬩腑鐨勬槧灝勫唴瀛樻棤鏁堝寲錛屼笉鍙互浣跨敤銆備絾鏄繚鐣欑┖闂?/td>
鍏跺畠 鍚屾錛?
銆銆int msync ( void * addr , size_t len, int flags);
鎺у埗錛?
銆銆shmctl( shmid , IPC_STAT , &buf ); 
銆銆// 鍙栧緱鍏變韓鍐呭瓨鐨勭姸鎬?
銆銆shmctl( shmid , IPC_RMID , &buf ); 
銆銆// 鍒犻櫎鍏變韓鍐呭瓨–鍒犻櫎鍏變韓鍐呭瓨錛屽交搴曚笉鍙敤錛岄噴鏀劇┖闂?/td>


鏉庨槼 2011-01-21 17:31 鍙戣〃璇勮
]]>
linux涓嬭幏鍙栨椂闂寸殑鑻ュ共鍑芥暟http://m.shnenglu.com/deane/articles/118718.html鏉庨槼鏉庨槼Fri, 25 Jun 2010 08:00:00 GMThttp://m.shnenglu.com/deane/articles/118718.htmlhttp://m.shnenglu.com/deane/comments/118718.htmlhttp://m.shnenglu.com/deane/articles/118718.html#Feedback0http://m.shnenglu.com/deane/comments/commentRss/118718.htmlhttp://m.shnenglu.com/deane/services/trackbacks/118718.html
asctime錛堝皢鏃墮棿鍜屾棩鏈熶互瀛楃涓叉牸寮忚〃紺猴級
 
 
鐩稿叧鍑芥暟
 time錛宑time錛実mtime錛宭ocaltime
 
琛ㄥご鏂囦歡
 #include<time.h>
 
瀹氫箟鍑芥暟
 char * asctime(const struct tm * timeptr);
 
鍑芥暟璇存槑
 asctime()灝嗗弬鏁皌imeptr鎵鎸囩殑tm緇撴瀯涓殑淇℃伅杞崲鎴愮湡瀹炰笘鐣屾墍浣跨敤鐨勬椂闂存棩鏈熻〃紺烘柟娉曪紝鐒跺悗灝嗙粨鏋滀互瀛楃涓插艦鎬佽繑鍥炪傛鍑芥暟宸茬粡鐢辨椂鍖鴻漿鎹㈡垚褰撳湴鏃墮棿錛屽瓧絎︿覆鏍煎紡涓?“Wed Jun 30 21:49:08 1993\n”
 
榪斿洖鍊?br> 鑻ュ啀璋冪敤鐩稿叧鐨勬椂闂存棩鏈熷嚱鏁幫紝姝ゅ瓧絎︿覆鍙兘浼氳鐮村潖銆傛鍑芥暟涓巆time涓嶅悓澶勫湪浜庝紶鍏ョ殑鍙傛暟鏄笉鍚岀殑緇撴瀯銆?br> 
闄勫姞璇存槑
 榪斿洖涓瀛楃涓茶〃紺虹洰鍓嶅綋鍦扮殑鏃墮棿鏃ユ湡銆?br> 
鑼冧緥
 #include <time.h>
main()
{
time_t timep;
time (&timep);
printf(“%s”,asctime(gmtime(&timep)));
}
 
鎵ц
 Sat Oct 28 02:10:06 2000
 
ctime錛堝皢鏃墮棿鍜屾棩鏈熶互瀛楃涓叉牸寮忚〃紺猴級
 
鐩稿叧鍑芥暟
 time錛宎sctime錛実mtime錛宭ocaltime
 
琛ㄥご鏂囦歡
 #include<time.h>
 
瀹氫箟鍑芥暟
 char *ctime(const time_t *timep);
 
鍑芥暟璇存槑
 ctime()灝嗗弬鏁皌imep鎵鎸囩殑time_t緇撴瀯涓殑淇℃伅杞崲鎴愮湡瀹炰笘鐣屾墍浣跨敤鐨勬椂闂存棩鏈熻〃紺烘柟娉曪紝鐒跺悗灝嗙粨鏋滀互瀛楃涓插艦鎬佽繑鍥炪傛鍑芥暟宸茬粡鐢辨椂鍖鴻漿鎹㈡垚褰撳湴鏃墮棿錛屽瓧絎︿覆鏍煎紡涓?#8220;Wed Jun 30 21 :49 :08 1993\n”銆傝嫢鍐嶈皟鐢ㄧ浉鍏崇殑鏃墮棿鏃ユ湡鍑芥暟錛屾瀛楃涓插彲鑳戒細琚牬鍧忋?br> 
榪斿洖鍊?br> 榪斿洖涓瀛楃涓茶〃紺虹洰鍓嶅綋鍦扮殑鏃墮棿鏃ユ湡銆?br> 
鑼冧緥
 #include<time.h>
main()
{
time_t timep;
time (&timep);
printf(“%s”,ctime(&timep));
}
 
鎵ц
 Sat Oct 28 10 : 12 : 05 2000
 
gettimeofday錛堝彇寰楃洰鍓嶇殑鏃墮棿錛?br> 
鐩稿叧鍑芥暟
 time錛宑time錛宖time錛宻ettimeofday
 
琛ㄥご鏂囦歡
 #include <sys/time.h>
#include <unistd.h>
 
瀹氫箟鍑芥暟
 int gettimeofday ( struct timeval * tv , struct timezone * tz )
 
鍑芥暟璇存槑
 gettimeofday()浼氭妸鐩墠鐨勬椂闂存湁tv鎵鎸囩殑緇撴瀯榪斿洖錛屽綋鍦版椂鍖虹殑淇℃伅鍒欐斁鍒皌z鎵鎸囩殑緇撴瀯涓?br>timeval緇撴瀯瀹氫箟涓?
struct timeval{
long tv_sec; /*縐?/
long tv_usec; /*寰*/
};
timezone 緇撴瀯瀹氫箟涓?
struct timezone{
int tz_minuteswest; /*鍜孏reenwich 鏃墮棿宸簡澶氬皯鍒嗛挓*/
int tz_dsttime; /*鏃ュ厜鑺傜害鏃墮棿鐨勭姸鎬?/
};
涓婅堪涓や釜緇撴瀯閮藉畾涔夊湪/usr/include/sys/time.h銆倀z_dsttime 鎵浠h〃鐨勭姸鎬佸涓?br>DST_NONE /*涓嶄嬌鐢?/
DST_USA /*緹庡浗*/
DST_AUST /*婢蟲床*/
DST_WET /*瑗挎*/
DST_MET /*涓*/
DST_EET /*涓滄*/
DST_CAN /*鍔犳嬁澶?/
DST_GB /*澶т笉鍒楅*/
DST_RUM /*緗楅┈灝間簹*/
DST_TUR /*鍦熻沖叾*/
DST_AUSTALT /*婢蟲床錛?986騫翠互鍚庯級*/
 
榪斿洖鍊?br> 鎴愬姛鍒欒繑鍥?錛屽け璐ヨ繑鍥烇紞1錛岄敊璇唬鐮佸瓨浜巈rrno銆傞檮鍔犺鏄嶦FAULT鎸囬拡tv鍜宼z鎵鎸囩殑鍐呭瓨絀洪棿瓚呭嚭瀛樺彇鏉冮檺銆?br> 
鑼冧緥
 #include<sys/time.h>
#include<unistd.h>
main(){
struct timeval tv;
struct timezone tz;
gettimeofday (&tv , &tz);
printf(“tv_sec; %d\n”, tv,.tv_sec) ;
printf(“tv_usec; %d\n”,tv.tv_usec);
printf(“tz_minuteswest; %d\n”, tz.tz_minuteswest);
printf(“tz_dsttime, %d\n”,tz.tz_dsttime);
}
 
鎵ц
 tv_sec: 974857339
tv_usec:136996
tz_minuteswest:-540
tz_dsttime:0
 
gmtime錛堝彇寰楃洰鍓嶆椂闂村拰鏃ユ湡錛?br> 
鐩稿叧鍑芥暟
 time,asctime,ctime,localtime
 
琛ㄥご鏂囦歡
 #include<time.h>
 
瀹氫箟鍑芥暟
 struct tm*gmtime(const time_t*timep);
 
鍑芥暟璇存槑
 gmtime()灝嗗弬鏁皌imep 鎵鎸囩殑time_t 緇撴瀯涓殑淇℃伅杞崲鎴愮湡瀹炰笘鐣屾墍浣跨敤鐨勬椂闂存棩鏈熻〃紺烘柟娉曪紝鐒跺悗灝嗙粨鏋滅敱緇撴瀯tm榪斿洖銆?br>緇撴瀯tm鐨勫畾涔変負
struct tm
{
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
};
int tm_sec 浠h〃鐩墠縐掓暟錛屾甯歌寖鍥翠負0-59錛屼絾鍏佽鑷?1縐?br>int tm_min 浠h〃鐩墠鍒嗘暟錛岃寖鍥?-59
int tm_hour 浠庡崍澶滅畻璧風殑鏃舵暟錛岃寖鍥翠負0-23
int tm_mday 鐩墠鏈堜喚鐨勬棩鏁幫紝鑼冨洿01-31
int tm_mon 浠h〃鐩墠鏈堜喚錛屼粠涓鏈堢畻璧鳳紝鑼冨洿浠?-11
int tm_year 浠?900 騫寸畻璧瘋嚦浠婄殑騫存暟
int tm_wday 涓鏄熸湡鐨勬棩鏁幫紝浠庢槦鏈熶竴綆楄搗錛岃寖鍥翠負0-6
int tm_yday 浠庝粖騫?鏈?鏃ョ畻璧瘋嚦浠婄殑澶╂暟錛岃寖鍥翠負0-365
int tm_isdst 鏃ュ厜鑺傜害鏃墮棿鐨勬棗鏍?br>姝ゅ嚱鏁拌繑鍥炵殑鏃墮棿鏃ユ湡鏈粡鏃跺尯杞崲錛岃屾槸UTC鏃墮棿銆?br> 
榪斿洖鍊?br> 榪斿洖緇撴瀯tm浠h〃鐩墠UTC 鏃墮棿
 
鑼冧緥
 #include <time.h>
main(){
char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
time_t timep;
struct tm *p;
time(&timep);
p=gmtime(&timep);
printf(“%d%d%d”,(1900+p->tm_year), (1+p->tm_mon),p->tm_mday);
printf(“%s%d;%d;%d\n”, wday[p->tm_wday], p->tm_hour, p->tm_min, p->tm_sec);
}
 
鎵ц
 2000/10/28 Sat 8:15:38
 
localtime錛堝彇寰楀綋鍦扮洰鍓嶆椂闂村拰鏃ユ湡錛?br> 
鐩稿叧鍑芥暟
 time, asctime, ctime, gmtime
 
琛ㄥご鏂囦歡
 #include<time.h>
 
瀹氫箟鍑芥暟
 struct tm *localtime(const time_t * timep);
 
鍑芥暟璇存槑
 localtime()灝嗗弬鏁皌imep鎵鎸囩殑time_t緇撴瀯涓殑淇℃伅杞崲鎴愮湡瀹炰笘鐣屾墍浣跨敤鐨勬椂闂存棩鏈熻〃紺烘柟娉曪紝鐒跺悗灝嗙粨鏋滅敱緇撴瀯tm榪斿洖銆傜粨鏋則m鐨勫畾涔夎鍙傝僩mtime()銆傛鍑芥暟榪斿洖鐨勬椂闂存棩鏈熷凡緇忚漿鎹㈡垚褰撳湴鏃跺尯銆?br> 
榪斿洖鍊?br> 榪斿洖緇撴瀯tm浠h〃鐩墠鐨勫綋鍦版椂闂淬?br> 
鑼冧緥
 #include<time.h>
main(){
char *wday[]={“Sun”,”Mon”,”Tue”,”Wed”,”Thu”,”Fri”,”Sat”};
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep); /*鍙栧緱褰撳湴鏃墮棿*/
printf (“%d%d%d ”, (1900+p->tm_year),( l+p->tm_mon), p->tm_mday);
printf(“%s%d:%d:%d\n”, wday[p->tm_wday],p->tm_hour, p->tm_min, p->tm_sec);
}
 
鎵ц
 2000/10/28 Sat 11:12:22
 
mktime錛堝皢鏃墮棿緇撴瀯鏁版嵁杞崲鎴愮粡榪囩殑縐掓暟錛?br> 
鐩稿叧鍑芥暟
 time錛宎sctime錛実mtime錛宭ocaltime
 
琛ㄥご鏂囦歡
 #include<time.h>
 
瀹氫箟鍑芥暟
 time_t mktime(strcut tm * timeptr);
 
鍑芥暟璇存槑
 mktime()鐢ㄦ潵灝嗗弬鏁皌imeptr鎵鎸囩殑tm緇撴瀯鏁版嵁杞崲鎴愪粠鍏厓1970騫?鏈?鏃?鏃?鍒? 縐掔畻璧瘋嚦浠婄殑UTC鏃墮棿鎵緇忚繃鐨勭鏁般?br> 
榪斿洖鍊?br> 榪斿洖緇忚繃鐨勭鏁般?br> 
鑼冧緥
 /* 鐢╰ime()鍙栧緱鏃墮棿錛堢鏁幫級錛屽埄鐢╨ocaltime()
杞崲鎴恠truct tm 鍐嶅埄鐢╩ktine錛堬級灝唖truct tm杞崲鎴愬師鏉ョ殑縐掓暟*/
#include<time.h>
main()
{
time_t timep;
strcut tm *p;
time(&timep);
printf(“time() : %d \n”,timep);
p=localtime(&timep);
timep = mktime(p);
printf(“time()->localtime()->mktime():%d\n”,timep);
}
 
鎵ц
 time():974943297
time()->localtime()->mktime():974943297
 
settimeofday錛堣緗洰鍓嶆椂闂達級
 
鐩稿叧鍑芥暟
 time錛宑time錛宖time錛実ettimeofday
 
琛ㄥご鏂囦歡
 #include<sys/time.h>
#include<unistd.h>
 
瀹氫箟鍑芥暟
 int settimeofday ( const struct timeval *tv,const struct timezone *tz);
 
鍑芥暟璇存槑
 settimeofday()浼氭妸鐩墠鏃墮棿璁炬垚鐢眛v鎵鎸囩殑緇撴瀯淇℃伅錛屽綋鍦版椂鍖轟俊鎭垯璁炬垚tz鎵鎸囩殑緇撴瀯銆傝緇嗙殑璇存槑璇峰弬鑰僩ettimeofday()銆傛敞鎰忥紝鍙湁root鏉冮檺鎵嶈兘浣跨敤姝ゅ嚱鏁頒慨鏀規椂闂淬?br> 
榪斿洖鍊?br> 鎴愬姛鍒欒繑鍥?錛屽け璐ヨ繑鍥烇紞1錛岄敊璇唬鐮佸瓨浜巈rrno銆?br> 
閿欒浠g爜
 EPERM 騫墮潪鐢眗oot鏉冮檺璋冪敤settimeofday錛堬級錛屾潈闄愪笉澶熴?br>EINVAL 鏃跺尯鎴栨煇涓暟鎹槸涓嶆紜殑錛屾棤娉曟紜緗椂闂淬?br> 
time錛堝彇寰楃洰鍓嶇殑鏃墮棿錛?br> 
鐩稿叧鍑芥暟
 ctime錛宖time錛実ettimeofday
 
琛ㄥご鏂囦歡
 #include<time.h>
 
瀹氫箟鍑芥暟
 time_t time(time_t *t);
 
鍑芥暟璇存槑
 姝ゅ嚱鏁頒細榪斿洖浠庡叕鍏?970騫?鏈?鏃ョ殑UTC鏃墮棿浠?鏃?鍒?縐掔畻璧峰埌鐜板湪鎵緇忚繃鐨勭鏁般傚鏋渢 騫墮潪絀烘寚閽堢殑璇濓紝姝ゅ嚱鏁頒篃浼氬皢榪斿洖鍊煎瓨鍒皌鎸囬拡鎵鎸囩殑鍐呭瓨銆?br> 
榪斿洖鍊?br> 鎴愬姛鍒欒繑鍥炵鏁幫紝澶辮觸鍒欒繑鍥?(time_t)-1)鍊鹼紝閿欒鍘熷洜瀛樹簬errno涓?br> 
鑼冧緥
 #include<time.h>
mian()
{
int seconds= time((time_t*)NULL);
printf(“%d\n”,seconds);
}
 



鏉庨槼 2010-06-25 16:00 鍙戣〃璇勮
]]>
vim鐩綍鏍戞彃浠禢ERD tree鐨勫畨瑁呮柟娉?http://m.shnenglu.com/deane/articles/109379.html鏉庨槼鏉庨槼Wed, 10 Mar 2010 10:33:00 GMThttp://m.shnenglu.com/deane/articles/109379.htmlhttp://m.shnenglu.com/deane/comments/109379.htmlhttp://m.shnenglu.com/deane/articles/109379.html#Feedback1http://m.shnenglu.com/deane/comments/commentRss/109379.htmlhttp://m.shnenglu.com/deane/services/trackbacks/109379.html緋葷粺 Debian 4.0
[1]涓嬭澆NERD tree
wget http://www.vim.org/scripts/download_script.php?src_id=9870 -O NERDTree.zip

[2]娣誨姞.vim閰嶇疆
鏌ョ湅~/.vim鐩綍錛屽鏋滀笉瀛樺湪錛屽垱寤烘鐩綍

[3]copy NERDTree.zip to ~/.vim

[4]unzip NERDTree.zip

ok .

浣跨敤鏂規硶鍜屾晥鏋滃鍥撅細
nerd_tree.png





鏉庨槼 2010-03-10 18:33 鍙戣〃璇勮
]]>
Vim涔婲erd Tree鏉傝崏甯姪http://m.shnenglu.com/deane/articles/109378.html鏉庨槼鏉庨槼Wed, 10 Mar 2010 10:32:00 GMThttp://m.shnenglu.com/deane/articles/109378.htmlhttp://m.shnenglu.com/deane/comments/109378.htmlhttp://m.shnenglu.com/deane/articles/109378.html#Feedback0http://m.shnenglu.com/deane/comments/commentRss/109378.htmlhttp://m.shnenglu.com/deane/services/trackbacks/109378.html 

銆銆涓鐩磋嫤浜庢病鏈夊ソ鐨勬枃浠舵祻瑙堝櫒錛屽埆浜烘墍縐伴亾鐨刉inManager鎴戜篃涓嶄範鎯笉鍠滄錛岃櫧鐒跺惉璇磋繃NerdTree鍗翠篃鍥犱負瑙夊緱涓嶄細鎬庝箞鏍瘋屾病鏈夎瘯鐢ㄣ傝繖嬈″疄鍦ㄥ繊涓嶈繃浜嗭紝涓璇曚箣涓嬫墠鍙戠幇錛屽師鏉ヨ繕鏄緢瓚佹墜婊粹斺斿埌搴曡繕鏄爲鐘舵樉紺烘柟寮忓ソ鍟?#8230;…姣攏etrw鏂逛究……
銆銆浠旂粏鐪嬩簡涓閬嶅府鍔╋紝濂藉蹇嵎閿紒娌$敤鐔熶簡榪樼湡璁頒笉浣忋備負浜嗗搥鎮兼垜閭e凡鎴愬ぉ澶栭浠欑殑鑻辮錛屽皢nerdtree鐨勫府鍔╁綍涓閮ㄥ垎濡備笅錛屼互渚涘弬鑰冧嬌鐢細

  1 鐩綍
  2 ================================================================================
  3 1.綆浠?br>  4 2.鍔熻兘
  5   2.1.鍏ㄥ眬鍛戒護
  6   2.2.涔︾
  7     2.2.1.涔︾琛?br>  8     2.2.2.涔︾鍛戒護
  9     2.2.3.鏃犳晥涔︾
 10   2.3.Nerdtree鏄犲皠
 11   2.4.鏂囦歡緋葷粺鑿滃崟
 12 3.閫夐」
 13   3.1.閫夐」鎬葷粨
 14   3.2.閫夐」鏄庣粏
 15
 16
 17 1.綆浠?/strong>
 18 --------------------------------------------------------------------------------
 19 Nerd tree鍙互璁╀綘嫻忚鏂囦歡緋葷粺騫舵墦寮鏂囦歡鎴栫洰褰曘?br> 20 浣犲彲浠ラ氳繃閿洏鎴栭紶鏍囨帶鍒跺畠浠ユ爲鐘跺浘鏄劇ず鏂囦歡緋葷粺錛屼篃鍙互鍦ㄥ叾涓繘琛屼竴浜涚畝鍗曠殑鏂囦歡緋葷粺鎿嶄綔銆?br> 21
 22 nerdtree鎻愪緵濡備笅鍔熻兘鍙婄壒鎬э細
 23 *浠ョ戶鎵挎爲鐨勫艦寮忔樉紺烘枃浠跺拰鐩綍
 24 *瀵瑰涓嬬被鍨嬬殑鏂囦歡榪涜涓嶅悓鐨勯珮浜樉紺?br> 25 銆*鏂囦歡
 26 銆*鐩綍
 27 銆*sym-links
 28 銆*蹇嵎鏂瑰紡
 29 銆*鍙鏂囦歡
 30 銆*鍙墽琛屾枃浠?br> 31 *鎻愪緵璁稿鏄犲皠鏉ユ帶鍒舵爲鐘剁粨鏋?br> 32 銆*瀵瑰睍寮/鏀舵嫝/嫻忚鐩綍緇撶偣鐨勬槧灝?br> 33 銆*瀵瑰湪鏂扮殑鎴栧凡瀛樺湪鐨勭獥鍙f垨Tab欏典腑鎵撳紑鏂囦歡鐨勬槧灝?br> 34 銆*瀵規敼鍙樻牴緇撶偣鐨勬槧灝?br> 35 銆*Mappings to navigate around the tree
 36 *鍙互灝嗘枃浠跺拰鐩綍娣誨姞鍒版敹钘忓す
 37 *鍙互鐢ㄩ紶鏍囪繘琛屽ぇ閮ㄥ垎鐨勬爲鐘剁粨鏋勫鑸?br> 38 *瀵規爲鐘剁粨鏋勫唴瀹圭殑榪囨護錛堝彲鍦ㄨ繍琛屾椂鍒囨崲錛?br> 39 銆*鑷畾涔夋枃浠惰繃婊ゅ櫒鍙互闃繪鏌愪簺鏂囦歡錛堟瘮濡倂im澶囦喚鏂囦歡絳夛級鐨勬樉紺?br> 40 銆*鍙夋槸鍚︽樉紺洪殣钘忔枃浠?br> 41 銆*鍙変笉鏄劇ず鏂囦歡鍙樉紺虹洰褰?br> 42 *鎻愪緵鏂囨湰鏂囦歡緋葷粺鑿滃崟鏉ュ垱寤?鍒犻櫎/縐誨姩/澶嶅埗鐩綍鎴栨枃浠?br> 43 *鍙互鑷畾涔塏erd紿楀彛鐨勪綅緗拰澶у皬
 44 *鍙互鑷畾涔夌粨鐐規帓搴忔柟寮?br> 45 *褰撲綘嫻忚鏂囦歡緋葷粺鐨勬椂鍊欏氨浼氭湁涓涓枃浠剁郴緇熺殑妯″瀷琚垱寤烘垨緇存姢銆傝繖鏍峰仛鏈夊嚑涓紭鐐癸細
 46 銆*鎵鏈夋枃浠剁郴緇熶俊鎭兘琚紦瀛樹簡錛屾湁闇瑕佺殑鏃跺欏彧瑕侀噸鏂拌鍏ョ紦瀛?br> 47 銆*濡傛灉閲嶆柊嫻忚涔嬪悗璁塊棶榪囩殑tree鐨勪竴閮ㄥ垎錛岀粨鐐瑰氨浼氫互涓婃淇濇寔鐨勫睍寮鎴栧悎鎷㈢殑鏍峰瓙鏄劇ず
 48 *璇ヨ剼鏈兘璁頒綇鍏夋爣浣嶇疆鍜岀獥鍙d綅緗紝鎵浠ュ彲浠ョ敤NERDTreeToggle鏉ュ垏鎹ree鐨勬樉紺轟笌闅愯棌
 49 *瀵逛簬澶歍ab錛屽彲浠ュ叡浜竴涓猅ree錛屼篃鍙互鍚勮嚜鎷ユ湁鍚勮嚜鐨則ree錛岃繕鍙互娣峰悎浠ヤ笂涓ょ鏂瑰紡
 50 *榛樿鎯呭喌涓嬶紝璇ヨ剼鏈鐩杤im鐨勯粯璁ゆ枃浠舵祻瑙堝櫒(netrw)錛屾墍浠ュ鏋滅洿鎺ヨ緭鍏?edit鍛戒護涔熶細鐢╪erd鏍戞墦寮
 51
 52
 53
 54 2.鍔熻兘
 55 --------------------------------------------------------------------------------
 56   2.1.鍏ㄥ眬鍛戒護
 57   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 58   :NERDTree [<start-directory> | <bookmark>]
 59       鎵撳紑涓涓狽erdtree錛屾牴緇撶偣鐢卞弬鏁版寚瀹氾紝涓嶆寚瀹氬弬鏁板氨鏄互褰撳墠鐩綍涓烘牴緇撶偣
 60   :NERDTreeFromBookmark <bookmark>
 61       鎵撳紑涓涓狽erdtree錛屾牴緇撶偣鐢卞弬鏁版墍鎸囧畾鐨勪功絳?br> 62   :NERDTreeToggle [<start-directory> | <bookmark>]
 63       鍦ㄥ綋鍓峊ab涓鏋淣erdtree宸茬粡瀛樺湪錛屽氨鍒囨崲鏄劇ず涓庨殣钘忥紱
 64       濡傛灉涓嶅瓨鍦紝灝辯浉褰撲簬鎵ц:NERDTree鍛戒護
 65   :NERDTreeMirror
 66       浠庡彟涓涓猅ab涓叡浜竴涓狽erdTree榪囨潵錛堝湪褰撳墠Tab鐨凾ree鎵浣滅殑鏀瑰彉涔熷弽搴斿埌鍘烼ab涓級
 67       濡傛灉鎬誨叡鍙湁涓涓猅ree錛屽氨鐩存帴鍏變韓錛涘鏋滀笉姝竴涓紝灝變細璇㈤棶鍏變韓鍝釜
 68   :NERDTreeClose
 69       鍦ㄥ綋鍓峊ab涓叧闂璗ree
 70
 71   2.2.涔︾
 72   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 73   鍦∟erdTree涓紝涔︾鐢ㄤ簬鏍囪鏌愪釜鎰熷叴瓚g殑鏂囦歡鎴栫洰褰曪紝姣斿鍙互鐢ㄤ功絳炬爣璁版墍鏈塒roject鐩綍
 74
 75     2.2.1.涔︾琛?/strong>
 76     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 77     濡傛灉涔︾琚縺媧伙紝鍒欐樉紺轟簬鏍戠姸鍥劇殑涓婃柟
 78     鍙互鍙屽嚮鎴栫敤NERDTree-o鏉ユ縺媧婚変腑鏂囦歡
 79     鍙互鐢∟ERDTree-t鏄犲皠浣塊変腑鏂囦歡鐢ㄦ柊Tab鎵撳紑錛屽茍璺沖埌鏂皌ab欏?br> 80     鍙互鐢∟ERDTree-T鏄犲皠浣塊変腑鏂囦歡鐢ㄦ柊Tab鎵撳紑錛屼絾涓嶈煩鍒版柊Tab欏?br> 81
 82     2.2.2.涔︾鍛戒護
 83     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 84     浠ヤ笅鍛戒護鍙湪鍦∟erdtree鐨刡uffer涓湁鏁?br> 85     :Bookmark <name>
 86         灝嗛変腑緇撶偣娣誨姞鍒頒功絳懼垪琛ㄤ腑錛屽茍鍛藉悕涓簄ame錛堜功絳懼悕涓嶅彲鍖呭惈絀烘牸錛夛紱
 87         濡備笌鐜版湁涔︾閲嶅悕錛屽垯瑕嗙洊鐜版湁涔︾銆?br> 88     :BookmarkToRoot <bookmark>
 89         浠ユ寚瀹氱洰褰曚功絳炬垨鏂囦歡涔︾鐨勭埗鐩綍浣滀負鏍圭粨鐐規樉紺篘erdTree
 90     :RevealBookmark <bookmark>
 91         濡傛灉鎸囧畾涔︾宸茬粡瀛樺湪浜庡綋鍓嶇洰褰曟爲涓嬶紝鎵撳紑瀹冪殑涓婂眰緇撶偣騫墮変腑璇ヤ功絳?
 92     :OpenBookmark <bookmark>
 93         鎵撳紑鎸囧畾鐨勬枃浠躲傦紙鍙傛暟蹇呴』鏄枃浠朵功絳撅級
 94         濡傛灉璇ユ枃浠跺湪褰撳墠鐨勭洰褰曟爲涓嬶紝鍒欐墦寮瀹冪殑涓婂眰緇撶偣騫墮変腑璇ヤ功絳?br> 95     :ClearBookmarks [<bookmarks>]
 96         娓呴櫎鎸囧畾涔︾錛涘鏈寚瀹氬弬鏁幫紝鍒欐竻闄ゆ墍鏈変功絳?br> 97     :ClearAllBookmarks
 98         娓呴櫎鎵鏈変功絳?br> 99     :ReadBookmarks
100         閲嶆柊璇誨叆'NERDTreeBookmarksFile'涓殑鎵鏈変功絳?br>101
102     2.2.3.鏃犳晥涔︾
103     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
104     濡傛灉鐩戞祴鍒版棤鏁堜功絳撅紝鑴氭湰灝變細鍙戝竷涓涓敊璇秷鎭茍灝嗘棤鏁堜功絳劇疆涓轟笉鍙敤錛?br>105     鏃犳晥涔︾灝嗚縐誨埌涔︾鏂囦歡鐨勬渶鍚庯紝鍦ㄦ湁鏁堜功絳懼拰鏃犳晥涔︾涔嬮棿鏈変竴涓┖琛屻?br>106     涔︾鏂囦歡涓殑姣忎竴琛屼唬琛ㄤ竴涓功絳撅紝鏍煎紡鏄?lt;bookmark name><space><full path to the bookmark location>
107     濡傛灉淇浜嗘煇涓棤鏁堜功絳撅紝鍒欏彲浠ラ噸鍚痸im鎴栦嬌鐢?ReadBookmarks鍛戒護閲嶆柊璇誨叆涔︾淇℃伅
108
109   2.3.Nerdtree鏄犲皠
110   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
111   o.......鍦ㄥ凡鏈夌獥鍙d腑鎵撳紑鏂囦歡銆佺洰褰曟垨涔︾錛屽茍璺沖埌璇ョ獥鍙?nbsp;  .....|NERDTree-o|  
112   go......鍦ㄥ凡鏈夌獥鍙d腑鎵撳紑鏂囦歡銆佺洰褰曟垨涔︾錛屼絾涓嶈煩鍒拌紿楀彛 .....|NERDTree-go|
113   t.......鍦ㄦ柊Tab涓墦寮閫変腑鏂囦歡/涔︾錛屽茍璺沖埌鏂癟ab          .....|NERDTree-t|  
114   T.......鍦ㄦ柊Tab涓墦寮閫変腑鏂囦歡/涔︾錛屼絾涓嶈煩鍒版柊Tab        .....|NERDTree-T|  
115   i.......split涓涓柊紿楀彛鎵撳紑閫変腑鏂囦歡錛屽茍璺沖埌璇ョ獥鍙?nbsp;       .....|NERDTree-i|  
116   gi......split涓涓柊紿楀彛鎵撳紑閫変腑鏂囦歡錛屼絾涓嶈煩鍒拌紿楀彛      .....|NERDTree-gi|
117   s.......vsp涓涓柊紿楀彛鎵撳紑閫変腑鏂囦歡錛屽茍璺沖埌璇ョ獥鍙?nbsp;         .....|NERDTree-s|  
118   gs......vsp涓涓柊紿楀彛鎵撳紑閫変腑鏂囦歡錛屼絾涓嶈煩鍒拌紿楀彛        .....|NERDTree-gs|
119   !.......鎵ц褰撳墠鏂囦歡                                     .....|NERDTree-!|  
120   O.......閫掑綊鎵撳紑閫変腑緇撶偣涓嬬殑鎵鏈夌洰褰?nbsp;                    .....|NERDTree-O|  
121   x.......鍚堟嫝閫変腑緇撶偣鐨勭埗鐩綍                             .....|NERDTree-x|  
122   X.......閫掑綊鍚堟嫝閫変腑緇撶偣涓嬬殑鎵鏈夌洰褰?nbsp;                    .....|NERDTree-X|  
123   e.......Edit the current dif                             .....|NERDTree-e|  
124
125   鍙屽嚮......鐩稿綋浜嶯ERDTree-o
126   涓敭......瀵規枃浠剁浉褰撲簬NERDTree-i錛屽鐩綍鐩稿綋浜嶯ERDTree-e
127
128   D.......鍒犻櫎褰撳墠涔︾
129           
130   P.......璺沖埌鏍圭粨鐐?br>131   p.......璺沖埌鐖剁粨鐐?br>132   K.......璺沖埌褰撳墠鐩綍涓嬪悓綰х殑絎竴涓粨鐐?br>133   J.......璺沖埌褰撳墠鐩綍涓嬪悓綰х殑鏈鍚庝竴涓粨鐐?br>134   <C-j>...璺沖埌褰撳墠鐩綍涓嬪悓綰х殑鍓嶄竴涓粨鐐?br>135   <C-k>...璺沖埌褰撳墠鐩綍涓嬪悓綰х殑鍚庝竴涓粨鐐?br>136           
137   C.......灝嗛変腑鐩綍鎴栭変腑鏂囦歡鐨勭埗鐩綍璁句負鏍圭粨鐐?br>138   u.......灝嗗綋鍓嶆牴緇撶偣鐨勭埗鐩綍璁句負鏍圭洰褰曪紝騫跺彉鎴愬悎鎷㈠師鏍圭粨鐐?br>139   U.......灝嗗綋鍓嶆牴緇撶偣鐨勭埗鐩綍璁句負鏍圭洰褰曪紝浣嗕繚鎸佸睍寮鍘熸牴緇撶偣
140   r.......閫掑綊鍒鋒柊閫変腑鐩綍
141   R.......閫掑綊鍒鋒柊鏍圭粨鐐?br>142   m.......鏄劇ず鏂囦歡緋葷粺鑿滃崟
143   cd......灝咰WD璁句負閫変腑鐩綍
144           
145   I.......鍒囨崲鏄惁鏄劇ず闅愯棌鏂囦歡
146   f.......鍒囨崲鏄惁浣跨敤鏂囦歡榪囨護鍣?br>147   F.......鍒囨崲鏄惁鏄劇ず鏂囦歡
148   B.......鍒囨崲鏄惁鏄劇ず涔︾
149           
150   q.......鍏抽棴NerdTree紿楀彛
151   ?.......鍒囨崲鏄惁鏄劇ずQuick Help
152         
153   
154
155   2.4.鏂囦歡緋葷粺鑿滃崟
156   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
157   甯姪璇翠腑鍖呭惈鏂板緩銆佸鍒躲佺Щ鍔ㄣ佸垹闄ゅ洓縐嶅懡浠わ紝浣哻opy鍙敮鎸?nix緋葷粺
158
159 3.鑷畾涔夐夐」
160 --------------------------------------------------------------------------------
161 loaded_nerd_tree            涓嶄嬌鐢∟erdTree鑴氭湰
162 NERDChristmasTree           璁㏕ree鎶婅嚜宸辯粰瑁呴グ寰楀濮垮褰╂紓浜偣
163 NERDTreeAutoCenter          鎺у埗褰撳厜鏍囩Щ鍔ㄨ秴榪囦竴瀹氳窛紱繪椂錛屾槸鍚﹁嚜鍔ㄥ皢鐒︾偣璋冩暣鍒板睆涓績
164 NERDTreeAutoCenterThreshold 涓嶯ERDTreeAutoCenter閰嶅悎浣跨敤
165 NERDTreeCaseSensitiveSort   鎺掑簭鏃舵槸鍚﹀ぇ灝忓啓鏁忔劅
166 NERDTreeChDirMode           紜畾鏄惁鏀瑰彉Vim鐨凜WD
167 NERDTreeHighlightCursorline 鏄惁楂樹寒鏄劇ず鍏夋爣鎵鍦ㄨ
168 NERDTreeHijackNetrw         鏄惁浣跨敤:edit鍛戒護鏃舵墦寮絎簩NerdTree
169 NERDTreeIgnore              榛樿鐨?#8220;鏃犺”鏂囦歡
170 NERDTreeBookmarksFile       鎸囧畾涔︾鏂囦歡
171 NERDTreeMouseMode           鎸囧畾榧犳爣妯″紡錛?.鍙屽嚮鎵撳紑錛?.鍗曠洰褰曞弻鏂囦歡錛?.鍗曞嚮鎵撳紑錛?br>172 NERDTreeQuitOnOpen          鎵撳紑鏂囦歡鍚庢槸鍚﹀叧闂璑erdTree紿楀彛
173 NERDTreeShowBookmarks       鏄惁榛樿鏄劇ず涔︾鍒楄〃
174 NERDTreeShowFiles           鏄惁榛樿鏄劇ず鏂囦歡
175 NERDTreeShowHidden          鏄惁榛樿鏄劇ず闅愯棌鏂囦歡
176 NERDTreeShowLineNumbers     鏄惁榛樿鏄劇ず琛屽彿
177 NERDTreeSortOrder           鎺掑簭瑙勫垯
178 NERDTreeStatusline          紿楀彛鐘舵佹爮
179 NERDTreeWinPos              紿楀彛浣嶇疆錛?left' or 'right'錛?br>180 NERDTreeWinSize             紿楀彛瀹?br>
鎴戠殑閰嶇疆錛?br> 1 "NERD Tree
 2 let NERDChristmasTree=1
 3 let NERDTreeAutoCenter=1
 4 let NERDTreeBookmarksFile=$VIM.'\Data\NerdBookmarks.txt'
 5 let NERDTreeMouseMode=2
 6 let NERDTreeShowBookmarks=1
 7 let NERDTreeShowFiles=1
 8 let NERDTreeShowHidden=1
 9 let NERDTreeShowLineNumbers=1
10 let NERDTreeWinPos='left'
11 let NERDTreeWinSize=31
12 nnoremap <silent> <leader>f :NERDTreeToggle<CR>

 鍘熸枃鍦板潃 http://mt-zj.blogspot.com/2009/02/vimnerd-tree.html


鏉庨槼 2010-03-10 18:32 鍙戣〃璇勮
]]>
vi/vim浣跨敤榪涢樁: vimgdb璋冭瘯鏃剁殑甯歌闂鍙婅В鍐?/title><link>http://m.shnenglu.com/deane/articles/109366.html</link><dc:creator>鏉庨槼</dc:creator><author>鏉庨槼</author><pubDate>Wed, 10 Mar 2010 08:59:00 GMT</pubDate><guid>http://m.shnenglu.com/deane/articles/109366.html</guid><wfw:comment>http://m.shnenglu.com/deane/comments/109366.html</wfw:comment><comments>http://m.shnenglu.com/deane/articles/109366.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/deane/comments/commentRss/109366.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/deane/services/trackbacks/109366.html</trackback:ping><description><![CDATA[<br>杞細<br><br>  <p align=left><strong><span>[ </span></strong><strong><span>闂涓</span></strong><strong><span>: </span></strong><strong><span>榪愯</span></strong><strong><span>GDB</span></strong><strong><span>鍛戒護鏃舵彁紺?/span></strong><strong><span>"unable to read from GDB pseudo tty"? ]</span></strong></p> <p align=left><span>鏈夎鑰呭湪璇曞浘鎵ц</span><span>GDB</span><span>鍛戒護鏃訛紝鍑虹幇涓婇潰鐨勬彁紺恒?/span><span> </span></p> <p align=left><span>鍑虹幇榪欎釜闂鏄敱浜庢病鏈夋紜緗?/span><span>gdbprg</span><span>鍙橀噺銆備嬌鐢ㄤ笅闈㈢殑鍛戒護璁劇疆涓涓?/span><span>GDB</span><span>紼嬪簭鐨勪綅緗嵆鍙В鍐蟲闂錛?/span><span> </span></p> <div> <p align=left><span>:set gdbprg=/path/to/gdb </span></p> </div> <p align=left><span>璇鋒妸涓婇潰鐨?/span><em><span>/path/to/gdb</span></em><span>鏇挎崲鎴愪綘璁$畻鏈轟腑</span><span>GDB</span><span>紼嬪簭鎵鍦ㄧ殑璺緞銆備綘鍙互鎶婅繖鍙ヨ瘽鍔犲埌浣犵殑</span><span><a target=_top><span>vimrc</span></a></span><span>涓紝榪欐牱姣忔鍚姩</span><span>vi</span><span>鏃朵細鑷姩璁劇疆姝ゅ彉閲忋?/span><span> </span></p> <p align=left><strong><span>[ </span></strong><strong><span>闂浜岋細</span></strong><strong><span> </span></strong><strong><span>鎻愮ず</span></strong><strong><span>"GDB busy: command discarded, please try again"? ]</span></strong></p> <p align=left><span>褰撲綘鐨勭▼搴忛渶瑕佺敤</span><em><span>scanf()</span></em><span>鎴栬?/span><em><span>getchar()</span></em><span>榪欑被鍑芥暟璇誨彇鐢ㄦ埛杈撳叆鏃訛紝浣犲彲鑳戒細鐪嬪埌榪囪繖鏍風殑鎻愮ず錛?/span><span> </span></p> <p align=left><span>GDB busy: command discarded, please try again </span></p> <p align=left><span>鍑虹幇榪欎釜鎻愮ず錛岃鏄庝綘鐨?/span><span>GDB</span><span>姝e湪絳夊緟鐢ㄦ埛杈撳叆錛屾墍浠ユ棤娉曞搷搴斾綘鎵杈撳叆鐨勫叾瀹?/span><span>GDB</span><span>鍛戒護銆?/span><span> </span></p> <p align=left><span>鍦ㄤ嬌鐢?/span><span>vimgdb</span><span>鏃訛紝濡傛灉浣犵殑紼嬪簭闇瑕佽鍙栫敤鎴瘋緭鍏ワ紝浣犲繀欏婚氳繃</span><span>GDB</span><span>鐨?/span><strong><span>tty</span></strong><span>鍛戒護鎴?/span><strong><span>run</span></strong><span>鏉ラ噸瀹氬悜紼嬪簭鐨勬爣鍑嗚緭鍏ャ?/span><span> </span></p> <p align=left><span>棣栧厛錛屼綘鎵撳紑涓涓粓绔?/span><span>(</span><span>鍙互鏄?/span><span>xterm/rxvt/urxvt/putty/…)</span><span>錛屽湪姝ょ粓绔唴杈撳叆鍛戒護</span><strong><span>tty</span></strong><span>錛?/span><span> </span></p> <div> <p align=left> </p> <p align=left><span>$ tty</span></p> <p align=left><span>/dev/pts/17 </span></p> </div> <p align=left><span>榪欐潯鍛戒護鐢ㄦ潵鏄劇ず姝ょ粓绔墍浣跨敤鐨勮澶囨枃浠跺悕銆傝幏寰椾簡榪欎釜璁懼鏂囦歡鍚嶅悗錛屼綘灝卞彲浠ラ噸瀹氬悜紼嬪簭鐨勬爣鍑嗚緭鍏ヨ緭鍑哄埌榪欎釜緇堢錛屽湪</span><span>GDB</span><span>涓緭鍏ヤ笅闈㈢殑鍛戒護錛?/span><span> </span></p> <div> <p align=left><span>tty /dev/pts/17 </span></p> </div> <p align=left><span>鎵ц瀹岃繖鏉″懡浠ゅ悗錛岀▼搴忕殑鏍囧噯杈撳叆</span><span>/</span><span>杈撳嚭灝辮閲嶅畾鍚戝埌</span><em><span>/dev/pts/17</span></em><span>浜嗭紝榪欐牱錛屽綋鎵ц鍒?/span><em><span>scanf()</span></em><span>鎴?/span><em><span>getchar()</span></em><span>鍑芥暟鏃訛紝鍒囨崲鍒伴偅涓粓绔緭鍏ユ寚瀹氬弬鏁幫紝鐒跺悗鍥炶濺錛岀▼搴忓氨浼氱戶緇悜涓嬫墽琛屻?/span><span> </span></p> <p align=left><strong><span>[ </span></strong><strong><span>闂涓夛細</span></strong><strong><span> vimgdb</span></strong><strong><span>鍙互鍦?/span></strong><strong><span>windows</span></strong><strong><span>涓嬩嬌鐢ㄥ悧</span></strong><strong><span>? ]</span></strong></p> <p align=left><span>vimgdb</span><span>涓嶈兘鍦?/span><span>windows</span><span>涓嬩嬌鐢ㄣ備笉榪囦綘鍙互鐢ㄤ綔鑰呮彁渚涚殑</span><span>Clewn</span><span>鎴?/span><span>Pyclewn</span><span>銆傝繖涓や釜紼嬪簭鍙互鍦?/span><span>Windows</span><span>鐨?/span><span>Vim/Gvim</span><span>涓嬌鐢ㄣ?/span><span> </span></p> <p align=left><span>榪欓噷鏈夋垜鍐欑殑涓綃囧叧浜?/span><span>pyclewn</span><span>鐨勬暀紼?/span><span>:<a target=_top><span><span>鍦?/span></span><span>VIM</span><span><span>涓嬌鐢?/span></span><span>GDB</span><span><span>璋冭瘯</span></span><span> – pyclewn</span></a></span><span>錛?/span><span>clewn</span><span>鐨勭敤娉曚笌涔嬬被浼箋?/span><span> </span></p> <p align=left><strong><span>[ </span></strong><strong><span>闂鍥涳細</span></strong><strong><span> </span></strong><strong><span>鎸夌┖鏍煎悗</span></strong><strong><span>vimgdb</span></strong><strong><span>鐨勫懡浠ょ獥鍙f病鏈夊脊鍑烘潵</span></strong><strong><span>? ]</span></strong></p> <p align=left><span>棣栧厛紜繚</span><span>vimgdb</span><span>鐨勬寜閿畾涔夋枃浠跺瓨鍦ㄣ傛墽琛屼笅闈㈢殑鍛戒護錛?/span><span> </span></p> <div> <p align=left><span>:set runtimepath? </span></p> </div> <p align=left><span>媯鏌ヨ繖鏉″懡浠ゆ墍鍒楀嚭鐨勬墍鏈夌洰褰曪紝濡傛灉浠諱竴鐩綍涓寘鍚?/span><em><span>macros/gdb_mappings.vim</span></em><span>鏂囦歡錛岃鏄庝綘鐨勬寜閿槧灝勬枃浠跺凡緇忓瓨鍦ㄣ傚鏋滀綘娌℃湁鎵懼埌璇ユ枃浠訛紝鍒?/span><span>vimgdb</span><span>鐩綍涓壘鍒拌繖涓懡浠わ紝鎷瘋礉鍒頒笂榪頒換鎰忎竴涓洰褰曚腑銆?/span><span> </span></p> <p align=left><span>鎺ヤ笅鏉ョ敤涓嬮潰鐨勫懡浠ゅ姞杞?/span><span>vimgdb</span><span>鐨勯敭緇戝畾錛?/span><span> </span></p> <div> <p align=left><span>:run macros/gdb_mappings.vim </span></p> </div> <p align=left><span>鐜板湪錛屼綘搴旇鍙互浣跨敤</span><span>vimgdb</span><span>鎵瀹氫箟鐨勫揩鎹烽敭浜嗐?/span><span> <br><br><br><br><br></span></p> <img src ="http://m.shnenglu.com/deane/aggbug/109366.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/deane/" target="_blank">鏉庨槼</a> 2010-03-10 16:59 <a href="http://m.shnenglu.com/deane/articles/109366.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Vim浣跨敤鍥劇ずhttp://m.shnenglu.com/deane/articles/108817.html鏉庨槼鏉庨槼Wed, 03 Mar 2010 10:16:00 GMThttp://m.shnenglu.com/deane/articles/108817.htmlhttp://m.shnenglu.com/deane/comments/108817.htmlhttp://m.shnenglu.com/deane/articles/108817.html#Feedback0http://m.shnenglu.com/deane/comments/commentRss/108817.htmlhttp://m.shnenglu.com/deane/services/trackbacks/108817.html
涓嬮潰涓ゅ紶Vim浣跨敤鍥炬槸浠庣綉涓婃敹闆嗙殑錛屼緵澶у鍙傝冿細




















鏉庨槼 2010-03-03 18:16 鍙戣〃璇勮
]]>
涓漢甯哥敤鐨刅IM鍛戒護鍒楄〃http://m.shnenglu.com/deane/articles/108815.html鏉庨槼鏉庨槼Wed, 03 Mar 2010 10:01:00 GMThttp://m.shnenglu.com/deane/articles/108815.htmlhttp://m.shnenglu.com/deane/comments/108815.htmlhttp://m.shnenglu.com/deane/articles/108815.html#Feedback0http://m.shnenglu.com/deane/comments/commentRss/108815.htmlhttp://m.shnenglu.com/deane/services/trackbacks/108815.html 

vim鏄竴涓妯″紡鐨勭紪杈戝櫒銆傚氨鐩墠鏉ョ湅錛屼富瑕佹湁浠ヤ笅鍑犱釜涓昏妯″紡銆?br>
銆銆1.閫氬父妯″紡(n) 鍦ㄥ叾瀹冧換浣曚竴涓ā寮忎笅,鐢‥SC鎴栬?ctrl+c 閿彲浠ラ鍒伴氬父妯″紡

銆銆2.鎻掑叆妯″紡(i) 鍦ㄨ繖涓ā寮忎笅,vim鍍忎竴涓父瑙佺殑緙栬緫鍣?鍦ㄩ氬父妯″紡涓?鐢╥鎴栬卆鍙互榪涜鏈ā寮?褰撶劧,榪樻湁涓浜涘叾瀹冨懡浠や篃鍙互.

銆銆3.鍙妯″紡(v) 鍦ㄨ繖涓ā寮忎笅,鍙互浣跨敤hjkl榪涜閫夋嫨.鐒跺悗榪涜copy,paste鎴栬呭叾瀹冩搷浣? 鍦ㄩ氬父妯″紡涓?鐢╲鍛戒護榪涜鍙妯″紡.

銆銆4. 鍧楁搷浣滄ā寮?V) 榪欐槸鍧楁搷浣滄ā寮? 鍦ㄩ氬父妯″紡涓?鐢╟trl+v榪涘叆鏈ā寮?

銆銆5. 淇敼妯″紡(R) 榪欐槸鏀瑰啓鐨勬ā寮?寰堝杞歡娉曠敤insert閿潵瀹屾垚榪欎釜鍒囨崲.鍦╲im涓?浠庨氬父妯″紡鐢≧鍗沖彲榪涘叆鏀瑰啓妯″紡.

銆銆6. 鎵╁睍鍛戒護妯″紡(ex) 榪欐槸鍛戒護鎵ц妯″紡 鍦ㄩ氬父妯″紡涓嬬敤:鍒囨崲鍒版妯″紡.



涓漢甯哥敤鐨刅IM鍛戒護鍒楄〃:

縐誨姩鍏夋爣
涓?k nk:鍚戜笂縐誨姩n琛?9999k鎴杇g鍙互縐誨埌絎竴琛?G縐誨埌鏈鍚庝竴琛?br>涓?j nj:鍚戜笅縐誨姩n琛?br>宸?h nh:鍚戝乏縐誨姩n鍒?br>鍙?l nl:鍚戝彸縐誨姩n鍒?

w錛氬厜鏍囦互鍗曡瘝鍚戝墠縐誨姩 nw錛氬厜鏍囧悜鍓嶇Щ鍔╪涓崟璇?鍏夋爣鍒板崟璇嶇殑絎竴涓瓧姣嶄笂
b錛氫笌w鐩稿弽
e: 鍏夋爣浠ュ崟璇嶅悜鍓嶇Щ鍔?ne錛氬厜鏍囧悜鍓嶇Щ鍔╪涓崟璇?鍏夋爣鍒板崟璇嶇殑鏈鍚庝竴涓瓧姣嶄笂
ge:涓巈鐩稿弽

$:縐誨姩鍏夋爣鍒拌灝?n$:縐誨姩鍒扮n琛岀殑琛屽熬
0錛圢um錛夛細縐誨姩鍏夋爣鍒拌棣?br>^:縐誨姩鍏夋爣鍒拌棣栫涓涓潪絀哄瓧絎︿笂鍘?/p>

f<a>:縐誨姩鍏夋爣鍒板綋鍓嶈鐨勫瓧絎涓婏紝nf<a>縐誨姩鍏夋爣鍒板綋鍓嶈鐨勭n涓猘瀛楃涓?br>F:鐩稿弽

%:縐誨姩鍒頒笌鍒跺尮閰嶇殑鎷彿涓婂幓錛堬級錛寋}錛孾]錛?lt;>絳夈?/p>

nG:縐誨姩鍒扮n琛屼笂 G:鍒版渶鍚庝竴琛?/p>

CTRL錛婫 寰楀埌褰撳墠鍏夋爣鍦ㄦ枃浠朵腑鐨勪綅緗?/p>

鍚戝墠緲婚〉錛欳TRL+F
鍚戜笅縐誨姩鍗婂睆錛欳TRL錛婫
鍚戝悗緲婚〉錛欳TRL+B

瀛樼洏錛?br>:q! :涓嶅瓨鐩橀鍑?br>:e! :鏀懼純淇敼鏂囦歡鍐呭錛岄噸鏂拌澆鍏ヨ鏂囦歡緙栬緫
:wq 錛氬瓨鐩橀鍑?/p>

dw錛氬垹闄や竴涓崟璇?闇灝嗗厜鏍囩Щ鍒板崟璇嶇殑絎竴涓瓧姣嶄笂錛屾寜dw錛屽鏋滃厜鏍囧湪鍗曡瘝浠繪剰浣嶇疆錛岀敤daw
dnw:鍒犻櫎n涓崟璇?br>dne:涔熷彲錛屽彧鏄垹闄ゅ埌鍗曡瘝灝?br>dnl:鍚戝彸鍒犻櫎n涓瓧姣?br>dnh:鍚戝乏鍒犻櫎n涓瓧姣?br>dnj:鍚戜笅鍒犻櫎n琛?br>dnk:鍚戜笂鍒犻櫎n琛?br>d$錛氬垹闄ゅ綋鍓嶅厜鏍囧埌鏀硅鐨勮灝劇殑瀛楁瘝
dd錛氬垹闄や竴琛?br>cnw[word]:灝唍涓獁ord鏀瑰彉涓簑ord
cc:鏀瑰彉鏁磋
C$:鏀瑰彉鍒拌灝?/p>

J: 鍒犻櫎鎹㈣絎︼紝灝嗗厜鏍囩Щ鍒版敼琛岋紝鎸塻hift+j鍒犻櫎琛屽熬鐨勬崲琛岀錛屼笅涓琛屾帴涓婃潵浜?
u: 鎾ら攢鍓嶄竴嬈$殑鎿嶄綔
shif+u(U):鎾ら攢瀵硅琛岀殑鎵鏈夋搷浣溿?br>
:set showmode :璁劇疆鏄劇ず宸ヤ綔妯″紡

o錛氬湪褰撳墠琛岀殑涓嬮潰鍙﹁搗涓琛?br>O錛坰hift+o)錛氬湪褰撳墠琛岀殑涓婇潰鍙﹁搗涓琛?/p>

nk鎴杗j錛氬厜鏍囧悜涓婃垨鍚戜笅縐籲琛岋紝n涓烘暟瀛?br>an!銆怑SC銆戯細鍦ㄨ鍚庨潰鍔爊涓劅鍙瑰彿(!)
nx:鎵цn嬈(鍒犻櫎)鎿嶄綔

ZZ錛氫繚瀛樺綋鍓嶆枃妗e茍閫鍑篤IM

:help 錛氭煡鐪嬪府鍔╂枃妗o紝鍦ㄨ繖涔嬩腑錛屾寜CTRL+] 榪涘叆瓚呰繛鎺ワ紝鎸塁TRL錛婳 榪斿洖銆?br>:help subject :鐪嬫煇涓涓婚鐨勫府鍔╋紝ZZ 閫鍑哄府鍔?/p>

:set number / set nonumber :鏄劇ず/涓嶆樉紺鴻鍙?br>:set ruler /set noruler:鏄劇ず/涓嶆樉紺烘爣灝?/p>

/pattern 姝f柟鍚戞悳绱竴涓瓧絎︽ā寮?br>?pattern 鍙嶆柟鍚戞悳绱竴涓瓧絎︽ā寮?br>鐒跺悗鎸塶 緇х畫鍚戜笅鎵?/p>

鎶婂厜鏍囨斁鍒版煇涓崟璇嶄笂闈紝鐒跺悗鎸?#215;鍙烽敭錛岃〃紺烘煡鎵捐繖涓崟璇?br>鏌ユ壘鏁翠釜鍗曡瘝錛?\<word\>

:set hlsearch 楂樹寒鏄劇ず鏌ユ壘鍒扮殑鍗曡瘝
:set nohlsearch 鍏抽棴鏀瑰姛鑳?br>
m[a-z]:鍦ㄦ枃涓仛鏍囪錛屾爣璁板彿鍙負a-z鐨?6涓瓧姣嶏紝鐢╜a鍙互縐誨姩鍒版爣璁癮澶?br>
r:鏇挎崲褰撳墠瀛楃
nr瀛楃錛氭浛鎹㈠綋鍓峮涓瓧絎?/p>

鏌ユ壘鏇挎崲錛?br>way1:
/銆恮ord銆?:鏌ユ壘鏌愪釜word
cw銆恘ewword銆?鏇挎崲涓烘柊word
n: 緇х畫鏌ユ壘
.: 鎵ц鏇挎崲

way2:
:s/string1/string2/g:鍦ㄤ竴琛屼腑灝唖tring1鏇挎崲涓簊tring2,g琛ㄧず鎵ц 鐢╟琛ㄧず闇瑕佺‘璁?br>:num1,num2 s/string1/string2/g:鍦ㄨnum1鑷硁um2涓棿灝唖tring1鏇挎崲涓簊tring2
:1,$ s/string1/string2/g:鍦ㄥ叏鏂囦腑灝唖tring1鏇挎崲涓簊tring2

 


v:榪涘叆visual 妯″紡
銆怑SC銆戦鍑?br>V:shift+v 榪涘叆琛岀殑visual 妯″紡
CTRL+V:榪涘鍧楁搷浣滄ā寮忕敤o鍜孫鏀瑰彉閫夋嫨鐨勮竟鐨勫ぇ灝忋?/p>

綺樿創錛歱錛岃繖鏄矘璐寸敤x鎴杁鍒犻櫎鐨勬枃鏈?br>澶嶅埗錛?br>ynw錛氬鍒秐涓崟璇?br>yy錛氬鍒朵竴琛?br>ynl:澶嶅埗n涓瓧絎?br>y$:澶嶅埗褰撳墠鍏夋爣鑷寵灝懼
nyy:鎷瘋礉n琛?br>瀹屼簡鐢╬綺樿創

:split:鍒嗗壊涓涓獥鍙?br>:split file.c 錛氫負鍙︿竴涓枃浠秄ile.c鍒嗛殧紿楀彛
:nsplit file.c: 涓哄彟涓涓枃浠秄ile.c鍒嗛殧紿楀彛錛屽茍鎸囧畾鍏惰鏁?br>CTRL錛媁鍦ㄧ獥鍙d腑鍒囨崲
:close錛氬叧闂綋鍓嶇獥鍙?/p>

鍦ㄦ墍鏈夎鎻掑叆鐩稿悓鐨勫唴瀹瑰include<錛屾搷浣滄柟娉曞涓嬶細
灝嗗厜鏍囩Щ鍒板紑濮嬫彃鍏ョ殑浣嶇疆錛屾寜CTRL+V榪涘叆VISUAL妯″紡錛岄夋嫨濂芥ā鍧楀悗
鎸塈錛坰hift+i)錛屽悗鎻掑叆瑕佹彃鍏ョ殑鏂囨湰錛屾寜[ESC]瀹屾垚銆?/p>

:read file.c 灝嗘枃浠秄ile.c鐨勫唴瀹規彃鍏ュ埌褰撳墠鍏夋爣鎵鍦ㄧ殑涓嬮潰
:0read file.c 灝嗘枃浠秄ile.c鐨勫唴瀹規彃鍏ュ埌褰撳墠鏂囦歡鐨勫紑濮嬪(絎?琛岋級
:nread file.c 灝嗘枃浠秄ile.c鐨勫唴瀹規彃鍏ュ埌褰撳墠鏂囦歡鐨勭n琛屽悗闈?br>:read !cmd :灝嗗閮ㄥ懡浠md鐨勮緭鍑烘彃濡傚埌褰撳墠鍏夋爣鎵鍦ㄧ殑涓嬮潰

:n1,n2 write temp.c 灝嗘湰鏂囦歡涓殑n1,鍒皀2琛屽啓鍏emp.c榪欎釜鏂囦歡涓幓

CTRL錛婰鍒鋒柊灞忓箷
shift + < 宸︾Щ涓琛?br>shift + > 鍙崇Щ涓琛?/p>

u: undo
CTRL+R: re-do
J: 鍚堝茍涓琛?br>CTRL+p 鑷姩瀹屾垚鍔熻兘
CTRL+g 鏌ョ湅褰撳墠鏂囦歡鍏ㄨ礬寰?br>

q[a-z] 寮濮嬭褰曚絾鍓嶅紑濮嬬殑鎿嶄綔涓哄畯錛屽悕縐板彲涓恒恆-z銆戯紝鐒跺悗鐢╭緇堟褰曞埗瀹忋?br>鐢╮eg鏄劇ず褰撳墠瀹氫箟鐨勬墍鏈夌殑瀹忥紝鐢ˊ[a-z]鏉ュ湪褰撳墠鍏夋爣澶勬墽琛屽畯[a-z].





鏉庨槼 2010-03-03 18:01 鍙戣〃璇勮
]]>
vim鍛戒護鍒楄〃http://m.shnenglu.com/deane/articles/108813.html鏉庨槼鏉庨槼Wed, 03 Mar 2010 09:57:00 GMThttp://m.shnenglu.com/deane/articles/108813.htmlhttp://m.shnenglu.com/deane/comments/108813.htmlhttp://m.shnenglu.com/deane/articles/108813.html#Feedback0http://m.shnenglu.com/deane/comments/commentRss/108813.htmlhttp://m.shnenglu.com/deane/services/trackbacks/108813.html

linux涓嬩笉鐔熸倝vim鍛戒護瀹炲湪鏄涓嶈繃鍘諱簡錛屼笅闈㈡槸甯哥敤鐨剉im鍛戒護鍒楄〃銆倂im鏄痩inux涓嬪懡浠よ涓嬈劇粡鍏哥紪杈戝櫒鎿嶄綔綆鍗曞姛鑳藉己澶э紝榪欐槸寰堝unix涓婂厓鑰佺駭紼嬪簭鍛樼殑鎸氱埍銆傛垜鏈湴鏈哄櫒涓婁竴鐩翠嬌鐢ㄧ殑鏄痸im+ctags緇勫悎錛屽緢鍙楃敤銆?/p>

榪涘叆vi鐨勫懡浠?br>vi filename :鎵撳紑鎴栨柊寤烘枃浠訛紝騫跺皢鍏夋爣緗簬絎竴琛岄
vi +n filename 錛氭墦寮鏂囦歡錛屽茍灝嗗厜鏍囩疆浜庣n琛岄
vi + filename 錛氭墦寮鏂囦歡錛屽茍灝嗗厜鏍囩疆浜庢渶鍚庝竴琛岄
vi +/pattern filename錛氭墦寮鏂囦歡錛屽茍灝嗗厜鏍囩疆浜庣涓涓笌pattern鍖歸厤鐨勪覆澶?br>vi -r filename 錛氬湪涓婃姝g敤vi緙栬緫鏃跺彂鐢熺郴緇熷穿婧冿紝鎭㈠filename
vi filename….filename 錛氭墦寮澶氫釜鏂囦歡錛屼緷嬈$紪杈?/p>

縐誨姩鍏夋爣綾誨懡浠?br>h 錛氬厜鏍囧乏縐諱竴涓瓧絎?br>l 錛氬厜鏍囧彸縐諱竴涓瓧絎?br>space錛氬厜鏍囧彸縐諱竴涓瓧絎?br>Backspace錛氬厜鏍囧乏縐諱竴涓瓧絎?br>k鎴朇trl+p錛氬厜鏍囦笂縐諱竴琛?br>j鎴朇trl+n 錛氬厜鏍囦笅縐諱竴琛?br>Enter 錛氬厜鏍囦笅縐諱竴琛?br>w鎴朩 錛氬厜鏍囧彸縐諱竴涓瓧鑷沖瓧棣?br>b鎴朆 錛氬厜鏍囧乏縐諱竴涓瓧鑷沖瓧棣?br>e鎴朎 錛氬厜鏍囧彸縐諱竴涓瓧j鑷沖瓧灝?br>) 錛氬厜鏍囩Щ鑷沖彞灝?br>( 錛氬厜鏍囩Щ鑷沖彞棣?br>}錛氬厜鏍囩Щ鑷蟲钀藉紑澶?br>{錛氬厜鏍囩Щ鑷蟲钀界粨灝?br>nG錛氬厜鏍囩Щ鑷崇n琛岄
n+錛氬厜鏍囦笅縐籲琛?br>n-錛氬厜鏍囦笂縐籲琛?br>n$錛氬厜鏍囩Щ鑷崇n琛屽熬
H 錛氬厜鏍囩Щ鑷沖睆騫曢《琛?br>M 錛氬厜鏍囩Щ鑷沖睆騫曚腑闂磋
L 錛氬厜鏍囩Щ鑷沖睆騫曟渶鍚庤
0錛氾紙娉ㄦ剰鏄暟瀛楅浂錛夊厜鏍囩Щ鑷沖綋鍓嶈棣?br>$錛氬厜鏍囩Щ鑷沖綋鍓嶈灝?/p>

灞忓箷緲繪粴綾誨懡浠?br>Ctrl+u錛氬悜鏂囦歡棣栫炕鍗婂睆
Ctrl+d錛氬悜鏂囦歡灝劇炕鍗婂睆
Ctrl+f錛氬悜鏂囦歡灝劇炕涓灞?br>Ctrl錛媌錛涘悜鏂囦歡棣栫炕涓灞?br>nz錛氬皢絎琻琛屾粴鑷沖睆騫曢《閮紝涓嶆寚瀹歯鏃跺皢褰撳墠琛屾粴鑷沖睆騫曢《閮ㄣ?/p>

鎻掑叆鏂囨湰綾誨懡浠?br>i 錛氬湪鍏夋爣鍓?br>I 錛氬湪褰撳墠琛岄
a錛氬厜鏍囧悗
A錛氬湪褰撳墠琛屽熬
o錛氬湪褰撳墠琛屼箣涓嬫柊寮涓琛?br>O錛氬湪褰撳墠琛屼箣涓婃柊寮涓琛?br>r錛氭浛鎹㈠綋鍓嶅瓧絎?br>R錛氭浛鎹㈠綋鍓嶅瓧絎﹀強鍏跺悗鐨勫瓧絎︼紝鐩磋嚦鎸塃SC閿?br>s錛氫粠褰撳墠鍏夋爣浣嶇疆澶勫紑濮嬶紝浠ヨ緭鍏ョ殑鏂囨湰鏇夸唬鎸囧畾鏁扮洰鐨勫瓧絎?br>S錛氬垹闄ゆ寚瀹氭暟鐩殑琛岋紝騫朵互鎵杈撳叆鏂囨湰浠f浛涔?br>ncw鎴杗CW錛氫慨鏀規寚瀹氭暟鐩殑瀛?br>nCC錛氫慨鏀規寚瀹氭暟鐩殑琛?/p>

鍒犻櫎鍛戒護
ndw鎴杗dW錛氬垹闄ゅ厜鏍囧寮濮嬪強鍏跺悗鐨刵-1涓瓧
do錛氬垹鑷寵棣?br>d$錛氬垹鑷寵灝?br>ndd錛氬垹闄ゅ綋鍓嶈鍙婂叾鍚巒-1琛?br>x鎴朮錛氬垹闄や竴涓瓧絎︼紝x鍒犻櫎鍏夋爣鍚庣殑錛岃孹鍒犻櫎鍏夋爣鍓嶇殑
Ctrl+u錛氬垹闄よ緭鍏ユ柟寮忎笅鎵杈撳叆鐨勬枃鏈?/p>

鎼滅儲鍙婃浛鎹㈠懡浠?:
/pattern錛氫粠鍏夋爣寮濮嬪鍚戞枃浠跺熬鎼滅儲pattern
?pattern錛氫粠鍏夋爣寮濮嬪鍚戞枃浠墮鎼滅儲pattern
n錛氬湪鍚屼竴鏂瑰悜閲嶅涓婁竴嬈℃悳绱㈠懡浠?br>N錛氬湪鍙嶆柟鍚戜笂閲嶅涓婁竴嬈℃悳绱㈠懡浠?br>錛歴/p1/p2/g錛氬皢褰撳墠琛屼腑鎵鏈塸1鍧囩敤p2鏇夸唬
錛歯1,n2s/p1/p2/g錛氬皢絎琻1鑷硁2琛屼腑鎵鏈塸1鍧囩敤p2鏇夸唬
錛歡/p1/s//p2/g錛氬皢鏂囦歡涓墍鏈塸1鍧囩敤p2鏇挎崲

閫夐」璁劇疆
all錛氬垪鍑烘墍鏈夐夐」璁劇疆鎯呭喌
term錛氳緗粓绔被鍨?br>ignorance錛氬湪鎼滅儲涓拷鐣ュぇ灝忓啓
list錛氭樉紺哄埗琛ㄤ綅(Ctrl+I)鍜岃灝炬爣蹇楋紙$)
number錛氭樉紺鴻鍙?br>report錛氭樉紺虹敱闈㈠悜琛岀殑鍛戒護淇敼榪囩殑鏁扮洰
terse錛氭樉紺虹畝鐭殑璀﹀憡淇℃伅
warn錛氬湪杞埌鍒殑鏂囦歡鏃惰嫢娌′繚瀛樺綋鍓嶆枃浠跺垯鏄劇ずNO write淇℃伅
nomagic錛氬厑璁稿湪鎼滅儲妯″紡涓紝浣跨敤鍓嶉潰涓嶅甫“\”鐨勭壒孌婂瓧絎?br>nowrapscan錛氱姝i鍦ㄦ悳绱㈠埌杈炬枃浠朵袱绔椂錛屽張浠庡彟涓绔紑濮?br>mesg錛氬厑璁竩i鏄劇ず鍏朵粬鐢ㄦ埛鐢╳rite鍐欏埌鑷繁緇堢涓婄殑淇℃伅

鏈鍚庤鏂瑰紡鍛戒護
錛歯1,n2 co n3錛氬皢n1琛屽埌n2琛屼箣闂寸殑鍐呭鎷瘋礉鍒扮n3琛屼笅
錛歯1,n2 m n3錛氬皢n1琛屽埌n2琛屼箣闂寸殑鍐呭縐昏嚦鍒扮n3琛屼笅
錛歯1,n2 d 錛氬皢n1琛屽埌n2琛屼箣闂寸殑鍐呭鍒犻櫎
錛歸 錛氫繚瀛樺綋鍓嶆枃浠?br>錛歟 filename錛氭墦寮鏂囦歡filename榪涜緙栬緫
錛歺錛氫繚瀛樺綋鍓嶆枃浠跺茍閫鍑?br>錛歲錛氶鍑簐i
錛歲!錛氫笉淇濆瓨鏂囦歡騫墮鍑簐i
錛?command錛氭墽琛宻hell鍛戒護command
錛歯1,n2 w!command錛氬皢鏂囦歡涓璶1琛岃嚦n2琛岀殑鍐呭浣滀負command鐨勮緭鍏ュ茍鎵ц涔嬶紝鑻ヤ笉鎸?br>瀹歯1錛宯2錛屽垯琛ㄧず灝嗘暣涓枃浠跺唴瀹逛綔涓篶ommand鐨勮緭鍏?br>錛歳!command錛氬皢鍛戒護command鐨勮緭鍑虹粨鏋滄斁鍒板綋鍓嶈 銆?/p>



鏉庨槼 2010-03-03 17:57 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
              久久综合影视| 最新日韩在线视频| 久久久亚洲综合| 欧美一区国产一区| 国产日韩欧美一区二区三区四区| 亚洲视频1区| 亚洲欧美日韩国产中文在线| 欧美涩涩视频| 午夜在线精品| 六月婷婷一区| 亚洲特黄一级片| 亚洲一区二区三区欧美| 久久精品91| 欧美一区二区三区四区在线观看 | 欧美日韩福利视频| 欧美在线免费视屏| 久久精品国产99国产精品澳门| 欧美黄色日本| 亚洲大胆视频| 在线播放不卡| 香蕉视频成人在线观看| 亚洲一区在线免费观看| 欧美手机在线视频| 亚洲视频在线观看一区| 欧美一区二区三区精品| 午夜国产精品视频| 欧美日韩国产免费观看| 久久网站免费| 黄色精品一区| 久久精品视频免费观看| 欧美在线电影| 国产精品视频你懂的| 一本色道久久88亚洲综合88| 99伊人成综合| 欧美视频四区| 午夜精品福利视频| 欧美在线免费观看| 国产偷久久久精品专区| 欧美一区二区黄色| 免费观看日韩| 99国产精品久久久| 久久综合狠狠综合久久综青草| 国产精品美女久久久免费| 在线亚洲观看| 理论片一区二区在线| 亚洲三级视频在线观看| 欧美日韩国内| 亚洲视频网在线直播| 久久男人资源视频| 亚洲美女91| 国产日韩在线一区| 免费精品99久久国产综合精品| 亚洲国产专区校园欧美| 欧美精品18+| 亚洲在线观看免费| 欧美成va人片在线观看| 午夜在线视频一区二区区别| 亚洲国产精品一区二区第一页 | 羞羞答答国产精品www一本| 欧美99久久| 欧美一区二区视频免费观看 | 亚洲人成亚洲人成在线观看图片| 欧美日韩三级视频| 免播放器亚洲一区| 欧美永久精品| 亚洲视频一区在线观看| 亚洲电影专区| 欧美ed2k| 久久中文欧美| 麻豆成人91精品二区三区| 欧美自拍偷拍| 欧美在线黄色| 久久精品欧美日韩精品| 午夜精品网站| 亚洲欧美日韩综合一区| 亚洲欧美日韩一区二区在线| 亚洲精品日韩久久| 日韩亚洲不卡在线| av成人天堂| 夜夜爽www精品| 亚洲在线中文字幕| 久久久亚洲一区| 欧美高清hd18日本| 亚洲国产欧美不卡在线观看| 亚洲韩国日本中文字幕| 亚洲精品一区二区三| 亚洲精品国产精品乱码不99按摩| 亚洲精品一级| 欧美一区激情| 欧美片网站免费| 国产精品久久久一本精品| 国产一区二区0| 久久免费视频在线观看| 免费短视频成人日韩| 国产精品电影在线观看| 国产综合视频| 亚洲视频欧洲视频| 久久综合999| 亚洲视频在线一区| 久久影院亚洲| 国产毛片精品视频| 日韩小视频在线观看专区| 免费欧美视频| 欧美中文字幕在线播放| 国产精品久久久久久久久果冻传媒 | 国产精品男gay被猛男狂揉视频| 国产午夜精品理论片a级大结局| 99re66热这里只有精品4| 欧美高清在线| 久久精品在线观看| 精品96久久久久久中文字幕无| 欧美一区二区三区免费观看| 91久久精品日日躁夜夜躁国产| 性欧美xxxx大乳国产app| 欧美性色综合| 午夜精品网站| 午夜日韩视频| 狠狠爱成人网| 美女精品在线观看| 美女黄毛**国产精品啪啪| 伊甸园精品99久久久久久| 快播亚洲色图| 美女露胸一区二区三区| 日韩午夜在线| 亚洲影院高清在线| 国精产品99永久一区一区| 蜜桃视频一区| 欧美xxxx在线观看| 亚洲午夜精品久久久久久浪潮| 这里只有精品视频在线| 亚洲香蕉网站| 国产亚洲精品高潮| 欧美成人第一页| 欧美精品观看| 欧美在线视频全部完| 欧美成人午夜激情| 亚洲欧美另类在线观看| 狂野欧美激情性xxxx| 亚洲欧美日韩系列| 欧美国产日韩亚洲一区| 久久爱另类一区二区小说| 欧美大片一区二区| 久久精品国产77777蜜臀| 欧美激情视频一区二区三区免费| 亚洲男人av电影| 欧美激情一区在线| 久久夜色精品| 国产一区二区久久精品| 亚洲午夜精品一区二区三区他趣| 亚洲精品美女在线观看| 久久精品在线| 免费在线看成人av| 国内精品久久久| 在线观看日韩av| 午夜日本精品| 久久午夜电影| 原创国产精品91| 老司机久久99久久精品播放免费| 欧美资源在线观看| 国产日本欧洲亚洲| 久久国产主播| 免费永久网站黄欧美| 亚洲国产天堂久久综合| 久久免费视频这里只有精品| 久久欧美中文字幕| 亚洲国产日韩精品| 欧美激情精品久久久久久久变态| 欧美激情一区二区久久久| 日韩视频在线你懂得| 欧美日韩一区二区三区四区在线观看| 亚洲国产精品成人久久综合一区| 亚洲国产成人精品久久久国产成人一区 | 久久久久久色| 亚洲国产99精品国自产| 欧美区二区三区| 欧美中文在线视频| 亚洲高清av| 国产精品成人免费视频| 亚洲欧洲av一区二区三区久久| 久久精品导航| 亚洲男人天堂2024| 在线观看91久久久久久| 欧美色图五月天| 狼狼综合久久久久综合网 | 裸体一区二区三区| 一区二区高清在线| 狂野欧美一区| 亚洲欧美国产不卡| 日韩午夜精品| 亚洲国产精品一区二区www| 国产精品一区二区在线观看| 欧美福利在线| 久久精品在线视频| 亚洲免费在线观看| 正在播放亚洲一区| 亚洲国产日韩欧美在线99| 久久精品一区二区国产| 亚洲制服av| 午夜精品久久久久久99热软件| 午夜国产精品影院在线观看|