锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲激情综合,亚洲国产高清aⅴ视频,最近中文字幕mv在线一区二区三区四区 http://www.shnenglu.com/ivy-jie/category/10521.htmlprogress ...zh-cnThu, 17 Sep 2009 09:04:13 GMTThu, 17 Sep 2009 09:04:13 GMT60rpm瀹夎鍖呯浉鍏沖懡浠?/title><link>http://www.shnenglu.com/ivy-jie/articles/94173.html</link><dc:creator>ivy-jie</dc:creator><author>ivy-jie</author><pubDate>Sun, 23 Aug 2009 08:19:00 GMT</pubDate><guid>http://www.shnenglu.com/ivy-jie/articles/94173.html</guid><wfw:comment>http://www.shnenglu.com/ivy-jie/comments/94173.html</wfw:comment><comments>http://www.shnenglu.com/ivy-jie/articles/94173.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/ivy-jie/comments/commentRss/94173.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/ivy-jie/services/trackbacks/94173.html</trackback:ping><description><![CDATA[<strong>浣跨敤rpm鍛戒護鏌ヨ杞歡鍖咃細</strong> <p>銆銆1銆佹煡璇㈢郴緇熶腑瀹夎鐨勬墍鏈塕PM鍖?/p> <p>銆銆$ rpm -qa</p> <p>銆銆鏌ヨ褰撳墠linux緋葷粺涓凡緇忓畨瑁呯殑杞歡鍖呫?/p> <p>銆銆渚嬶細$ rpm -qa | grep -i x11 | head -3 瀵熺湅緋葷粺涓寘鍚玿11瀛楃涓茬殑鍓?琛岃蔣浠跺寘銆?/p> <p>銆銆2銆佹煡璇㈣蔣浠跺寘鏄惁瀹夎</p> <p>銆銆$ rpm –q rpm鍖呭悕縐?瀵熺湅緋葷粺涓寚瀹氳蔣浠跺寘鏄惁瀹夈?/p> <p>銆銆渚? $ rpm -q bash 瀵熺湅緋葷粺涓璪ash杞歡鍖呮槸鍚﹀畨瑁呫?/p> <p>銆銆"rpm -q"鍛戒護涓寚瀹氱殑杞歡鍖呭悕縐伴渶瑕佸噯紜殑鎷煎啓錛岃鍛戒護涓嶄細鍦ㄨ蔣浠跺寘鐨勫悕縐頒腑榪涜灞閮ㄥ尮閰嶇殑鏌ヨ銆?/p> <p>銆銆3銆佹煡璇㈠凡瀹夎杞歡鍖呰緇嗕俊鎭?/p> <p>銆銆$ rpm –qi RPM鍖呭悕縐?鏌ヨlinux緋葷粺涓寚瀹氬悕縐拌蔣浠跺寘鐨勮緇嗕俊鎭?/p> <p>銆銆渚嬶細$ rpm -qi bash 瀵熺湅bash杞歡鍖呯殑璇︾粏淇℃伅銆?/p> <p>銆銆"rpm -qi"鍛戒護鐨勬墽琛岀粨鏋滀腑鍖呭惈杈冭緇嗙殑淇℃伅錛屽寘鎷細杞歡鍚嶇О錛岀増鏈俊鎭紝鍖呭ぇ灝忥紝鎻忚堪錛岀瓑銆?/p> <p>銆銆4銆佹煡璇㈠凡瀹夎杞歡鍖呬腑鐨勬枃浠跺垪琛?/p> <p>銆銆$ rpm –ql RPM鍖呭悕縐?鏌ヨ宸插畨瑁呰蔣浠跺寘鍦ㄥ綋鍓嶇郴緇熶腑瀹夎浜嗗摢浜涙枃浠躲?/p> <p>銆銆渚嬶細$ rpm -ql bash | head -3 鏌ョ湅bash杞歡鍦ㄧ郴緇熶腑宸插畨瑁呮枃浠剁殑鍓?琛屾枃浠跺垪琛ㄣ?/p> <p>銆銆$ rpm -ql bash | grep bin 鐢ㄨ繃婊ゆ柟寮忓療鐪媌ash涓寘鍚玝in瀛楃涓茬殑鏂囦歡鍒楄〃銆?/p> <p>銆銆5銆佹煡璇㈢郴緇熶腑鏂囦歡鎵灞炵殑杞歡鍖?/p> <p>銆銆$ rpm –qf 鏂囦歡鍚嶇О 鏌ヨlinux緋葷粺涓寚瀹氭枃浠舵墍灞炵殑杞歡鍖呫?/p> <p>銆銆渚嬶細$ rpm -qf /bin/bash 瀵熺湅bash鏂囦歡鎵灞炵殑杞歡鍖呫?/p> <p>銆銆bash-3.0-19.2 鏄劇ず緇撴灉銆?/p> <p>銆銆6銆佹煡璇PM瀹夎鍖呮枃浠朵腑鐨勪俊鎭?</p> <p>銆銆$ rpm –qpi RPM鍖呮枃浠跺悕 瀵熺湅RPM鍖呮湭瀹夎鍓嶇殑璇︾粏淇℃伅銆?/p> <p>銆銆$ rpm –qpl RPM鍖呮枃浠跺悕 瀵熺湅RPM鍖呮湭瀹夎鍓嶇殑鏂囦歡鍒楄〃銆?/p> <p>銆銆"rpm -qpi鍜宺pm -qpl 榪欎袱鏉″懡浠ゅ彲浣滀負鍦ㄥ畨瑁呰蔣浠跺寘涔嬪墠瀵瑰叾鐨勪簡瑙c?/p> <p>銆銆7銆乺pm鍛戒護鏌ヨ瀹炰緥</p> <p>銆銆$ which mount 鑾峰緱mount鍛戒護鐨勫彲鎵ц鏂囦歡璺緞銆?/p> <p>銆銆$ rpm –qf /bin/mount 鏌ヨ/bin/mount鎵灞炵殑杞歡鍖呫?/p> <p>銆銆$ rpm –qi util-linux 鏌ヨ/bin/mount鎵灞炶蔣浠跺寘鐨勮緇嗕俊鎭?/p> <p>銆銆$ rpm –qf util-linux | grep mount 鏌ヨ/bin/mount鎵灞炶蔣浠跺寘涓寘鎷琺ount鐩稿叧鎵鏈夋枃浠躲?/p> <p>銆銆<strong taggedby="hylanda">浣跨敤rpm鍛戒護瀹夎杞歡鍖咃細</strong></p> <p>銆銆1銆乺pm杞歡鍖呭湴鍩烘湰瀹夎</p> <p>銆銆$ rpm –i rpm瀹夎鍖呮枃浠跺悕 瀹夎璇ヨ蔣浠跺寘涓殑鏂囦歡鍒板綋鍓嶇郴緇燂紝瀹夎榪囩▼涓嶆彁紺轟換浣曚俊鎭?/p> <p>銆銆2銆佸湪瀹夎杞歡鍖呯殑鍚屾椂鏄劇ず璇︾粏淇℃伅</p> <p>銆銆$ rpm –ivh rpm瀹夎鍖呮枃浠?瀹夎璇ヨ蔣浠跺寘涓殑鏂囦歡鍒板綋鍓嶇郴緇燂紝瀹夎榪囩▼浼氫互鐧懼垎姣旂殑褰㈠紡鏄劇ず瀹夎鐨勮繘搴﹀拰涓浜涘叾浠栦俊鎭?/p> <p>銆銆3銆丷PM杞歡鍖呭畨瑁呯殑渚濊禆鍏崇郴</p> <p>銆銆寮哄埗瀹夎錛? rpm --force –i rpm鍖呮枃浠跺悕</p> <p>銆銆娉細瑕佸厛婊¤凍杞歡鍖呯殑渚濊禆鍏崇郴鍚庡啀榪涜杞歡鍖呯殑瀹夎錛屼嬌鐢ㄥ己鍒跺畨瑁呭懡浠ゅ畨瑁呬笉鑳戒繚璇佽蔣浠跺畨瑁呭埌緋葷粺鍚庝竴瀹氳兘</p> <p>銆銆姝e父榪愯錛屽洜姝ゅ緩璁厧閲嶄嬌鐢ㄣ?/p> <p>銆銆<strong taggedby="hylanda">浣跨敤rpm鍛戒護鍗歌澆杞歡鍖咃細</strong></p> <p>銆銆1銆丷PM杞歡鍖呯殑鍗歌澆</p> <p>銆銆$ rpm -e 杞歡鍖呭悕縐?/p> <p>銆銆杞歡鍖呯殑鍗歌澆錛屽湪鍗歌澆鏃朵笉鏄劇ず浠諱綍淇℃伅銆?/p> <p>銆銆娉細RPM杞歡鍖呯殑鍗歌澆鍚屾牱瀛樺湪渚濊禆鍏崇郴錛屽彧鏈夊湪娌℃湁渚濊禆鍏崇郴瀛樺湪鏃舵墠鑳藉鍏惰繘琛屽嵏杞姐?/p> <p>銆銆2銆乺pm杞歡鍖呭嵏杞界殑渚濊禆鍏崇郴</p> <p>銆銆鍦ㄤ嬌鐢≧PM鍛戒護榪涜鍗歌澆鏃訛紝RPM鍛戒護浼氬垎鏋愯鍗歌澆鐨勮蔣浠跺寘鐨勪緷璧栧叧緋伙紝褰撳瓨鍦ㄤ緷璧栧叧緋繪椂浼氳嚜鍔ㄥ仠姝紝騫舵樉鐢?</p> <p>銆銆鍝釜杞歡閫犳垚鐨勫嵏杞藉け璐ャ傛牴鎹甊PM鎻愮ず鐨勯敊璇俊鎭紝紜畾鍏堝嵏杞界殑杞歡鍖咃紝鍐嶅嵏杞借渚濊禆鐨勮蔣浠跺寘銆?/p> <p>銆銆<strong taggedby="hylanda">浣跨敤rpm鍛戒護鍗囩駭杞歡鍖咃細</strong></p> <p>銆銆$ rpm - U rpm瀹夎鍖呮枃浠跺悕</p> <p>銆銆娉細"rpm -u"鍛戒護涓嬌鐢ㄧ殑鍗囩駭杞歡鍖呮枃浠舵渶濂戒嬌鐢≧ED HAT鍏徃閽堝褰撳墠鐨刲inux鐗堟湰瀹樻柟鎺ㄥ嚭鐨勫崌綰ф枃浠訛紝寤鴻涓嶈浣跨敤絎笁鏂規彁渚涚殑鍗囩駭鍖呫?/p> <p><!--鍒嗛〉--></p> <p>銆銆<strong taggedby="hylanda">緙栬瘧搴旂敤紼嬪簭鍓嶇殑鍑嗗宸ヤ綔錛?/strong></p> <p>銆銆1銆佺‘璁ょ郴緇熶腑宸茬粡瀹夎浜嗙紪璇戠幆澧?/p> <p>銆銆$ rpm -qa | grep gcc</p> <p>銆銆紜畾褰撳墠緋葷粺涓畨瑁呬簡gcc緙栬瘧鍣ㄧ幆澧冦?/p> <p>銆銆2銆佷笅杞絧rozilla紼嬪簭鐨勬簮浠g爜瀹夎鍖呮枃浠?/p> <p>銆銆3銆侀噴鏀懼凡涓嬭澆鐨勬簮浠g爜杞歡鍖呮枃浠?/p> <p>銆銆$ tar jxf prozilla-2.0.4.tar.bz2</p> <p>銆銆閲婃斁浠ヤ笅杞界殑婧愪唬鐮佽蔣浠跺寘鏂囦歡鍒板綋鍓嶇洰褰曘傝В鍘嬪悗鐨勬枃浠跺悕錛歱rozilla-2.0.4</p> <p>銆銆鎵╁睍錛歵ar鐨剎zvf鍙傛暟鐢ㄤ簬閲婃斁浠ar.gz鏍煎紡鐨勫帇緙╁寘銆?/p> <p>銆銆4銆佽繘鍏ユ簮浠g爜鐩綍</p> <p>銆銆$ cd prozilla-2.0.4 榪涘叆鐩綍銆?/p> <p>銆銆$ pwd 鏄劇ず褰撳墠鐩綍璺緞銆?/p> <p>銆銆/home/teacher/download/prozilla-2.0.4 鏄劇ず緇撴灉銆?/p> <p>銆銆緙栬瘧杞歡瀹夎鐨勮礬寰勶細</p> <p>銆銆$ ./configure --prefix=/home/teacher/proz </p> <p>銆銆鍦╬rozilla紼嬪簭鐨勯厤緗腑錛屼嬌鐢?--prdfix"閫夐」鍙互鎸囧畾搴旂敤紼嬪簭緙栬瘧鍚庣殑瀹夎璺緞錛屽鏋滀笉浣跨敤"--prefix"</p> <p>銆銆閫夐」鎸囧畾瀹夎璺緞錛宑onfigure紼嬪簭灝嗛厤緗畃rozilla鐨勯粯璁ゅ畨瑁呰礬寰勪負"/usr/local/bin"鐩綍銆?/p> <p>銆銆5銆佺▼搴忕紪璇戣繃紼?/p> <p>銆銆$ make</p> <p>銆銆浣跨敤make鍛戒護榪涜紼嬪簭鐨勪簩榪涘埗緙栬瘧銆?/p> <p>銆銆6銆佺▼搴忓畨瑁呰繃紼?/p> <p>銆銆$ make install</p> <p>銆銆"make install"鍛戒護灝嗘寜鐓onfiguer鍛戒護鐨?--prefix"閫夐」涓瀹氱殑瀹夎璺緞灝嗗凡緙栬瘧瀹屾垚鐨勫簲鐢ㄧ▼搴忓畨瑁呭埌鐩爣鐩綍銆?/p> <p>銆銆7銆侀獙璇佺紪璇戝畨瑁呯殑紼嬪簭</p> <p>銆銆$ ls /home/teacher/proz </p> <p>銆銆瀵熺湅proz鏂囦歡澶逛腑鐨勬枃浠躲?/p> <p>銆銆bin include lib man share</p> <p>銆銆緙栬瘧鍓嶇殑閰嶇疆</p> <p>銆銆$ ./configure - - help </p> <p>銆銆<strong taggedby="hylanda">緙栬瘧涓庡畨瑁咃細</strong></p> <p>銆銆1銆佺▼搴忕紪璇戣繃紼?/p> <p>銆銆$ make </p> <p>銆銆2銆佺▼搴忓畨瑁呰繃紼?/p> <p>銆銆$ make install</p> <p>銆銆3銆侀獙璇佺紪璇戝畨瑁呯殑紼嬪簭</p> <img src ="http://www.shnenglu.com/ivy-jie/aggbug/94173.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/ivy-jie/" target="_blank">ivy-jie</a> 2009-08-23 16:19 <a href="http://www.shnenglu.com/ivy-jie/articles/94173.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>linux鍛戒護1http://www.shnenglu.com/ivy-jie/articles/89567.htmlivy-jieivy-jieWed, 08 Jul 2009 13:41:00 GMThttp://www.shnenglu.com/ivy-jie/articles/89567.htmlhttp://www.shnenglu.com/ivy-jie/comments/89567.htmlhttp://www.shnenglu.com/ivy-jie/articles/89567.html#Feedback0http://www.shnenglu.com/ivy-jie/comments/commentRss/89567.htmlhttp://www.shnenglu.com/ivy-jie/services/trackbacks/89567.htmlhttp://itbbs-arch.pconline.com.cn/topic.jsp?tid=2746314 

1銆佸畨瑁呬互rpm鏂瑰紡鎻愪緵鐨勮蔣浠?br>Rpm(the red hat package manager)鏄竴涓紑鏀劇殑杞歡鍖呯鐞嗙郴緇熴?br>鍔熻兘錛氬彲浠ュ畨瑁呭拰鍗歌澆RPM鍖呯殑杞歡
#rpm –ivh *.rpm 瀹夎RPM鍖咃紱
#rpm –ivh –force *.rpm 鍦ㄥ師鍏堝畨瑁呯殑鍩虹涓婂啀寮鴻瀹夎涓嬈★紱
#rpm –Uvh *.rpm 鍗囩駭rpm鍖?br>#rpm –qa 鏌ユ壘鍒楀嚭緋葷粺涓墍鏈夊畨瑁呯殑rpm鍖?br>#rpm –q sendmail錛氭煡鐪媠endmail鍖呯殑鎯呭喌
#rpm –ql sendmail:鏌ョ湅sendmail瀹夎鐨勪綅緗?br>#rpm –e *.rpm 鍗歌澆rpm鍖?br>#rpm - qlp name.rpm 鏌ョ湅name.rpm鏈夊摢浜涙枃浠?br>#rpm - qf name.rpm 鏌ョ湅宸茬粡瑁呭ソ鐨勬枃浠跺睘浜庡摢涓猺pm鍖?br>#rpm2cpio filename.rpm 浣跨敤“rpm2cpio”鏉ヤ粠RPM鏂囨。涓彁鍙栨枃浠?br>

2. 瀹夎浠ユ簮浠g爜鏂瑰紡鎻愪緵鐨勮蔣浠?br>錛?錛夈佽В鍖呰В鍘嬶細
#tar –xzvf *.tar.gz 瑙e寘瑙e帇鍚庝細鍦ㄥ綋鍓嶇洰褰曚笅寤虹珛涓涓瓙鐩綍,濡倄xxx
錛?錛夈?cd xxxx
錛?錛夈?./configure
錛?錛夈?make
錛?錛夈?make install 

3.Find浣跨敤鑼冧緥
find . -name ls.txt
find . -name ls.txt –print
find / -name ‘c??’ –print
find / -name ‘f*’ –print
find . -name ‘f*’ –exec ls –l { } \; 
find . -name f\* –ok rm { } \; 錛堜氦浜掑紡鎻愰棶錛?br>find . -perm 644 –mtime 4 
find . -name ‘c??’ –o -name ‘d??’
4. grep
鍔熻兘錛氬湪鏂囦歡涓悳瀵誨尮閰嶇殑琛屽茍榪涜杈撳嚭
璇硶錛歡rep [鍙傛暟]<瑕佹壘鐨勫瓧涓?gt;<鍘熸枃浠?gt;
-num:杈撳嚭鍖歸厤琛屽墠鍚庡悇num琛岀殑鍐呭
-A num:杈撳嚭鍖歸厤琛屽悗num琛岀殑鍐呭
-B num:杈撳嚭鍖歸厤琛屽墠num琛岀殑鍐呭
-i錛氬拷鐣ュぇ灝忓啓鐨勫尯鍒?br>-v:鍙樉紺哄嚭閭d簺涓嶅寘鎷煇瀛椾覆鐨勮鍜屾枃浠訛紝鍜岄粯璁ょ殑鐩稿弽
5. mkdir
鍔熻兘錛氬垱寤轟竴涓洰褰曪紙綾諱技MSDOS涓嬬殑md鍛戒護錛夈?br>璇硶錛歮kdir [閫夐」] dir-name 
- m 瀵規柊寤虹洰褰曡緗瓨鍙栨潈闄愩備篃鍙互鐢╟hmod鍛戒護璁劇疆銆?br>- p 鍙互鏄竴涓礬寰勫悕縐般傛鏃惰嫢璺緞涓殑鏌愪簺鐩綍灝氫笉瀛樺湪錛?nbsp;鍔犱笂姝ら夐」鍚庯紝 緋葷粺灝嗚嚜鍔ㄥ緩绔嬪ソ閭d簺灝氫笉瀛樺湪鐨勭洰褰曪紝鍗充竴嬈″彲浠ュ緩绔嬪涓洰褰曘?br>#mkdir –m a=rwx test
#mkdir –m u=rwx,g=rx,o=rx test1
#mkdir –m 755 test2
#mkdir –p test3/test4(test3鍜宼est4鍧囦負鏂扮洰褰曪級

6銆乺mdir
鍔熻兘錛氬垹闄ょ┖鐩綍銆?br>璇硶錛歳mdir [閫夐」] dir-name 
- p 閫掑綊鍒犻櫎鐩綍dirname錛屽綋瀛愮洰褰曞垹闄ゅ悗鍏剁埗鐩綍涓虹┖鏃訛紝涔熶竴鍚岃鍒犻櫎銆?br>7銆乫ile
鍔熻兘錛氭煡鐪嬫枃浠剁被鍨?br>璇硶錛歠ile 鏂囦歡鍚?br>
8銆乧at
鍔熻兘錛氭煡鐪嬫枃鏈枃浠剁殑鍐呭
璇硶錛歝at 鏂囦歡鍚?br>9銆乵ore
鍔熻兘錛氬垎灞忔樉紺烘枃鏈枃浠剁殑鍐呭銆?br>10銆乴ess
鍔熻兘錛氭樉紺烘枃鏈枃浠剁殑鍐呭錛屽彲浣跨敤pageup鍜宲agedown涓婄炕欏典笅緲婚〉銆?br>
11銆乭ead
鍔熻兘錛氭煡鐪嬫枃浠剁殑寮澶撮儴鍒嗗唴瀹?br>璇硶錛歨ead [琛屾暟] 鏂囦歡鍚?br>鐢ㄦ硶錛?head test.txt:鏄劇ず鍓?0琛屽唴瀹?br>#head -20 test.txt 鏄劇ず鍓?0琛屽唴瀹廣?br>12銆乼ail
鍔熻兘錛氭煡鐪嬫枃浠剁殑緇撳熬閮ㄥ垎鍐呭銆?br>璇硶錛歵ail [琛屾暟] 鏂囦歡鍚?br>榛樿鐨勮鏁頒負10琛屻?br>
13銆乻ort
鍔熻兘錛氬鏂囨湰鏂囦歡涓殑鍚勮榪涜鎺掑簭
鐢ㄦ硶錛歴ort 鏂囦歡鍚?br>渚嬶細#sort 123.txt >456.txt 灝?23.txt鎺掑簭鍚庨噸瀹氬悜鍒?56.txt鏂囦歡涓?br>14銆乽niq
鍔熻兘錛氬皢閲嶅琛屼粠杈撳嚭鏂囦歡涓垹闄わ紝鍙暀涓嬫瘡鏉¤褰曠殑鍞竴鏍鋒湰 
璇硶錛?nbsp;uniq 鏂囦歡鍚?br>#uniq 456.txt鏂囦歡涓殑閲嶅琛屽垹闄ゅ悗杈撳嚭

 

ivy-jie 2009-07-08 21:41 鍙戣〃璇勮
]]>
vi鍛戒護 http://www.shnenglu.com/ivy-jie/articles/88479.htmlivy-jieivy-jieThu, 25 Jun 2009 00:27:00 GMThttp://www.shnenglu.com/ivy-jie/articles/88479.htmlhttp://www.shnenglu.com/ivy-jie/comments/88479.htmlhttp://www.shnenglu.com/ivy-jie/articles/88479.html#Feedback0http://www.shnenglu.com/ivy-jie/comments/commentRss/88479.htmlhttp://www.shnenglu.com/ivy-jie/services/trackbacks/88479.html    涓夌妯″紡:
  Command錛堝懡浠わ級妯″紡錛岀敤浜庤緭鍏ュ懡浠わ紱
 Insert錛堟彃鍏ワ級妯″紡錛岀敤浜庢彃鍏ユ枃鏈紱
 Visual錛堝彲瑙嗭級妯″紡錛岀敤浜庤鍖栫殑鐨勯珮浜茍閫夊畾姝f枃

   榛樿妯″紡鏄疌ommand,褰撴垜浠寜ESC閿悗錛屾帴鐫鍐嶈緭鍏?鍙鋒椂錛岃繘鍏ommand妯″紡
   :wq 寮哄埗鎬у啓鍏ユ枃浠跺茍閫鍑恒傚嵆浣挎枃浠舵病鏈夎淇敼涔熷己鍒跺啓鍏ワ紝騫舵洿鏂版枃浠剁殑淇敼鏃墮棿銆?br>   :x 鍐欏叆鏂囦歡騫墮鍑恒備粎褰撴枃浠惰淇敼鏃舵墠鍐欏叆錛屽茍鏇存柊鏂囦歡淇敼鏃墮棿錛屽惁鍒欎笉浼氭洿鏂版枃浠朵慨鏀規椂闂淬?br>   榪欎袱鑰呬竴鑸儏鍐典笅娌′粈涔堜笉涓鏍鳳紝浣嗘槸鍦ㄧ紪紼嬫柟闈紝瀵圭紪杈戞簮鏂囦歡鍙兘浼氫駭鐢熼噸瑕佸獎鍝嶃傚洜涓烘枃浠跺嵆浣挎病鏈変慨鏀癸紝":wq"寮哄埗鏇存柊鏂囦歡鐨勪慨鏀規椂闂達紝榪欐牱浼氳make緙栬瘧鏁翠釜欏圭洰鏃朵互涓烘枃浠惰淇敼榪囦簡錛岀劧鍚庡氨寰楅噸鏂扮紪璇戦摼鎺ョ敓鎴愬彲鎵ц鏂囦歡銆傝繖鍙兘浼氫駭鐢熻浜鴻瑙g殑鍚庢灉錛屽綋鐒朵篃浜х敓浜嗕笉蹇呰鐨勭郴緇熻祫婧愯姳閿銆?span style="COLOR: red">寤鴻鐢?x
   :w  淇濆瓨錛?br> :w  filename 鍙﹀瓨涓篺ilename錛?br> :wq! 淇濆瓨閫鍑猴紱
 :wq! filename 娉細浠ilename涓烘枃浠跺悕淇濆瓨鍚庨鍑猴紱
 :q! 涓嶄繚瀛橀鍑猴紱
2



ivy-jie 2009-06-25 08:27 鍙戣〃璇勮
]]>
Linux涓婥澶氱嚎紼嬬紪紼?/title><link>http://www.shnenglu.com/ivy-jie/articles/87518.html</link><dc:creator>ivy-jie</dc:creator><author>ivy-jie</author><pubDate>Fri, 12 Jun 2009 11:47:00 GMT</pubDate><guid>http://www.shnenglu.com/ivy-jie/articles/87518.html</guid><wfw:comment>http://www.shnenglu.com/ivy-jie/comments/87518.html</wfw:comment><comments>http://www.shnenglu.com/ivy-jie/articles/87518.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/ivy-jie/comments/commentRss/87518.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/ivy-jie/services/trackbacks/87518.html</trackback:ping><description><![CDATA[  Linux緋葷粺涓嬬殑澶氱嚎紼嬮伒寰狿OSIX綰跨▼鎺ュ彛錛岀О涓簆thread銆傜紪鍐橪inux涓嬬殑澶氱嚎紼嬬▼搴忥紝闇瑕佷嬌鐢ㄥご鏂囦歡pthread.h錛岃繛鎺ユ椂闇瑕佷嬌鐢ㄥ簱libpthread.a銆傞『渚胯涓涓嬶紝Linux涓媝thread鐨勫疄鐜版槸閫氳繃緋葷粺璋冪敤clone錛堬級鏉ュ疄鐜扮殑銆俢lone錛堬級鏄疞inux鎵鐗規湁鐨勭郴緇熻皟鐢紝瀹冪殑浣跨敤鏂瑰紡綾諱技fork錛屽叧浜巆lone錛堬級鐨勮緇嗘儏鍐碉紝鏈夊叴瓚g殑璇昏呭彲浠ュ幓鏌ョ湅鏈夊叧鏂囨。璇存槑銆備笅闈㈡垜浠睍紺轟竴涓渶綆鍗曠殑澶氱嚎紼嬬▼搴廵xample1.c銆?<br><br> <table align=center bgColor=#e3e3e3 border=1> <tbody> <tr> <td>/* example.c*/<br>#include <stdio.h><br>#include <pthread.h><br>void thread(void)<br>{<br>銆int i;<br>銆for(i=0;i<3;i++)<br>銆銆printf("This is a pthread.n");<br>}<br><br>int main(void)<br>{<br>銆pthread_t id;<br>銆int i,ret;<br>銆ret=pthread_create(&id,NULL,(void *) thread,NULL);<br>銆if(ret!=0){<br>銆銆printf ("Create pthread error!n");<br>銆銆exit (1);<br>銆}<br>銆for(i=0;i<3;i++)<br>銆銆printf("This is the main process.n");<br>銆pthread_join(id,NULL);<br>銆return (0);<br>}</td> </tr> </tbody> </table> <br>銆銆鎴戜滑緙栬瘧姝ょ▼搴忥細<br><br> <table align=center bgColor=#e3e3e3 border=1> <tbody> <tr> <td>gcc example1.c -lpthread -o example1</td> </tr> </tbody> </table> <br>銆銆榪愯example1錛屾垜浠緱鍒板涓嬬粨鏋滐細<br><br> <table align=center bgColor=#e3e3e3 border=1> <tbody> <tr> <td>This is the main process.<br>This is a pthread.<br>This is the main process.<br>This is the main process.<br>This is a pthread.<br>This is a pthread.</td> </tr> </tbody> </table> <br>銆銆鍐嶆榪愯錛屾垜浠彲鑳藉緱鍒板涓嬬粨鏋滐細<br><br> <table align=center bgColor=#e3e3e3 border=1> <tbody> <tr> <td>This is a pthread.<br>This is the main process.<br>This is a pthread.<br>This is the main process.<br>This is a pthread.<br>This is the main process.</td> </tr> </tbody> </table> <br>銆銆鍓嶅悗涓ゆ緇撴灉涓嶄竴鏍鳳紝榪欐槸涓や釜綰跨▼浜夊ずCPU璧勬簮鐨勭粨鏋溿備笂闈㈢殑紺轟緥涓紝鎴戜滑浣跨敤鍒頒簡涓や釜鍑芥暟錛宲thread_create鍜宲thread_join錛屽茍澹版槑浜嗕竴涓猵thread_t鍨嬬殑鍙橀噺銆?br><br>銆銆pthread_t鍦ㄥご鏂囦歡/usr/include/bits/pthreadtypes.h涓畾涔夛細<br><br>銆銆typedef unsigned long int pthread_t;<br><br>銆銆瀹冩槸涓涓嚎紼嬬殑鏍囪瘑絎︺傚嚱鏁皃thread_create鐢ㄦ潵鍒涘緩涓涓嚎紼嬶紝瀹冪殑鍘熷瀷涓猴細<br><br> <table align=center bgColor=#e3e3e3 border=1> <tbody> <tr> <td>extern int pthread_create __P ((pthread_t *__thread, __const pthread_attr_t *__attr,void *(*__start_routine) (void *), void *__arg));</td> </tr> </tbody> </table> <br>銆銆絎竴涓弬鏁頒負鎸囧悜綰跨▼鏍囪瘑絎︾殑鎸囬拡錛岀浜屼釜鍙傛暟鐢ㄦ潵璁劇疆綰跨▼灞炴э紝絎笁涓弬鏁版槸綰跨▼榪愯鍑芥暟鐨勮搗濮嬪湴鍧錛屾渶鍚庝竴涓弬鏁版槸榪愯鍑芥暟鐨勫弬鏁般傝繖閲岋紝鎴戜滑鐨勫嚱鏁皌hread涓嶉渶瑕佸弬鏁幫紝鎵浠ユ渶鍚庝竴涓弬鏁拌涓虹┖鎸囬拡銆傜浜屼釜鍙傛暟鎴戜滑涔熻涓虹┖鎸囬拡錛岃繖鏍峰皢鐢熸垚榛樿灞炴х殑綰跨▼銆傚綰跨▼灞炴х殑璁懼畾鍜屼慨鏀規垜浠皢鍦ㄤ笅涓鑺傞槓榪般傚綋鍒涘緩綰跨▼鎴愬姛鏃訛紝鍑芥暟榪斿洖0錛岃嫢涓嶄負0鍒欒鏄庡垱寤虹嚎紼嬪け璐ワ紝甯歌鐨勯敊璇繑鍥炰唬鐮佷負EAGAIN鍜孍INVAL銆傚墠鑰呰〃紺虹郴緇熼檺鍒跺垱寤烘柊鐨勭嚎紼嬶紝渚嬪綰跨▼鏁扮洰榪囧浜嗭紱鍚庤呰〃紺虹浜屼釜鍙傛暟浠h〃鐨勭嚎紼嬪睘鎬у奸潪娉曘傚垱寤虹嚎紼嬫垚鍔熷悗錛屾柊鍒涘緩鐨勭嚎紼嬪垯榪愯鍙傛暟涓夊拰鍙傛暟鍥涚‘瀹氱殑鍑芥暟錛屽師鏉ョ殑綰跨▼鍒欑戶緇繍琛屼笅涓琛屼唬鐮併?<br><br>銆銆鍑芥暟pthread_join鐢ㄦ潵絳夊緟涓涓嚎紼嬬殑緇撴潫銆傚嚱鏁板師鍨嬩負錛?br><br>銆銆extern int pthread_join __P ((pthread_t __th, void **__thread_return));<br><br>銆銆絎竴涓弬鏁頒負琚瓑寰呯殑綰跨▼鏍囪瘑絎︼紝絎簩涓弬鏁頒負涓涓敤鎴峰畾涔夌殑鎸囬拡錛屽畠鍙互鐢ㄦ潵瀛樺偍琚瓑寰呯嚎紼嬬殑榪斿洖鍊箋傝繖涓嚱鏁版槸涓涓嚎紼嬮樆濉炵殑鍑芥暟錛岃皟鐢ㄥ畠鐨勫嚱鏁板皢涓鐩寸瓑寰呭埌琚瓑寰呯殑綰跨▼緇撴潫涓烘錛屽綋鍑芥暟榪斿洖鏃訛紝琚瓑寰呯嚎紼嬬殑璧勬簮琚敹鍥炪備竴涓嚎紼嬬殑緇撴潫鏈変袱縐嶉斿緞錛屼竴縐嶆槸璞℃垜浠笂闈㈢殑渚嬪瓙涓鏍鳳紝鍑芥暟緇撴潫浜嗭紝璋冪敤瀹冪殑綰跨▼涔熷氨緇撴潫浜嗭紱鍙︿竴縐嶆柟寮忔槸閫氳繃鍑芥暟pthread_exit鏉ュ疄鐜般傚畠鐨勫嚱鏁板師鍨嬩負錛?br><br>銆銆extern void pthread_exit __P ((void *__retval)) __attribute__ ((__noreturn__));<br><br>銆銆鍞竴鐨勫弬鏁版槸鍑芥暟鐨勮繑鍥炰唬鐮侊紝鍙pthread_join涓殑絎簩涓弬鏁皌hread_return涓嶆槸NULL錛岃繖涓煎皢琚紶閫掔粰thread_return銆傛渶鍚庤璇存槑鐨勬槸錛屼竴涓嚎紼嬩笉鑳借澶氫釜綰跨▼絳夊緟錛屽惁鍒欑涓涓帴鏀跺埌淇″彿鐨勭嚎紼嬫垚鍔熻繑鍥烇紝鍏朵綑璋冪敤pthread_join鐨勭嚎紼嬪垯榪斿洖閿欒浠g爜ESRCH銆?br><br>銆銆鍦ㄨ繖涓鑺傞噷錛屾垜浠紪鍐欎簡涓涓渶綆鍗曠殑綰跨▼錛屽茍鎺屾彙浜嗘渶甯哥敤鐨勪笁涓嚱鏁皃thread_create錛宲thread_join鍜宲thread_exit銆備笅闈紝鎴戜滑鏉ヤ簡瑙g嚎紼嬬殑涓浜涘父鐢ㄥ睘鎬т互鍙婂浣曡緗繖浜涘睘鎬с?br><br>銆銆<strong>淇敼綰跨▼鐨勫睘鎬?/strong><br><br>銆銆鍦ㄤ笂涓鑺傜殑渚嬪瓙閲岋紝鎴戜滑鐢╬thread_create鍑芥暟鍒涘緩浜嗕竴涓嚎紼嬶紝鍦ㄨ繖涓嚎紼嬩腑錛屾垜浠嬌鐢ㄤ簡榛樿鍙傛暟錛屽嵆灝嗚鍑芥暟鐨勭浜屼釜鍙傛暟璁句負NULL銆傜殑紜紝瀵瑰ぇ澶氭暟紼嬪簭鏉ヨ錛屼嬌鐢ㄩ粯璁ゅ睘鎬у氨澶熶簡錛屼絾鎴戜滑榪樻槸鏈夊繀瑕佹潵浜嗚В涓涓嬬嚎紼嬬殑鏈夊叧灞炴с?br><br>銆銆灞炴х粨鏋勪負pthread_attr_t錛屽畠鍚屾牱鍦ㄥご鏂囦歡/usr/include/pthread.h涓畾涔夛紝鍠滄榪芥牴闂簳鐨勪漢鍙互鑷繁鍘繪煡鐪嬨傚睘鎬у間笉鑳界洿鎺ヨ緗紝欏諱嬌鐢ㄧ浉鍏沖嚱鏁拌繘琛屾搷浣滐紝鍒濆鍖栫殑鍑芥暟涓簆thread_attr_init錛岃繖涓嚱鏁板繀欏誨湪pthread_create鍑芥暟涔嬪墠璋冪敤銆傚睘鎬у璞′富瑕佸寘鎷槸鍚︾粦瀹氥佹槸鍚﹀垎紱匯佸爢鏍堝湴鍧銆佸爢鏍堝ぇ灝忋佷紭鍏堢駭銆傞粯璁ょ殑灞炴т負闈炵粦瀹氥侀潪鍒嗙銆佺己鐪?M鐨勫爢鏍堛佷笌鐖惰繘紼嬪悓鏍風駭鍒殑浼樺厛綰с?br><br>銆銆鍏充簬綰跨▼鐨勭粦瀹氾紝鐗墊秹鍒板彟澶栦竴涓蹇碉細杞昏繘紼嬶紙LWP錛歀ight Weight Process錛夈傝交榪涚▼鍙互鐞嗚В涓哄唴鏍哥嚎紼嬶紝瀹冧綅浜庣敤鎴峰眰鍜岀郴緇熷眰涔嬮棿銆傜郴緇熷綰跨▼璧勬簮鐨勫垎閰嶃佸綰跨▼鐨勬帶鍒舵槸閫氳繃杞昏繘紼嬫潵瀹炵幇鐨勶紝涓涓交榪涚▼鍙互鎺у埗涓涓垨澶氫釜綰跨▼銆傞粯璁ょ姸鍐典笅錛屽惎鍔ㄥ灝戣交榪涚▼銆佸摢浜涜交榪涚▼鏉ユ帶鍒跺摢浜涚嚎紼嬫槸鐢辯郴緇熸潵鎺у埗鐨勶紝榪欑鐘跺喌鍗崇О涓洪潪緇戝畾鐨勩傜粦瀹氱姸鍐典笅錛屽垯欏懼悕鎬濅箟錛屽嵆鏌愪釜綰跨▼鍥哄畾鐨?緇?鍦ㄤ竴涓交榪涚▼涔嬩笂銆傝緇戝畾鐨勭嚎紼嬪叿鏈夎緝楂樼殑鍝嶅簲閫熷害錛岃繖鏄洜涓篊PU鏃墮棿鐗囩殑璋冨害鏄潰鍚戣交榪涚▼鐨勶紝緇戝畾鐨勭嚎紼嬪彲浠ヤ繚璇佸湪闇瑕佺殑鏃跺欏畠鎬繪湁涓涓交榪涚▼鍙敤銆傞氳繃璁劇疆琚粦瀹氱殑杞昏繘紼嬬殑浼樺厛綰у拰璋冨害綰у彲浠ヤ嬌寰楃粦瀹氱殑綰跨▼婊¤凍璇稿瀹炴椂鍙嶅簲涔嬬被鐨勮姹傘?br><br>銆銆璁劇疆綰跨▼緇戝畾鐘舵佺殑鍑芥暟涓簆thread_attr_setscope錛屽畠鏈変袱涓弬鏁幫紝絎竴涓槸鎸囧悜灞炴х粨鏋勭殑鎸囬拡錛岀浜屼釜鏄粦瀹氱被鍨嬶紝瀹冩湁涓や釜鍙栧鹼細PTHREAD_SCOPE_SYSTEM錛堢粦瀹氱殑錛夊拰PTHREAD_SCOPE_PROCESS錛堥潪緇戝畾鐨勶級銆備笅闈㈢殑浠g爜鍗沖垱寤轟簡涓涓粦瀹氱殑綰跨▼銆?<br><br> <table align=center bgColor=#e3e3e3 border=1> <tbody> <tr> <td>#include <pthread.h><br>pthread_attr_t attr;<br>pthread_t tid;<br><br>/*鍒濆鍖栧睘鎬у鹼紝鍧囪涓洪粯璁ゅ?/<br>pthread_attr_init(&attr);<br>pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);<br><br>pthread_create(&tid, &attr, (void *) my_function, NULL);</td> </tr> </tbody> </table> <br>銆銆綰跨▼鐨勫垎紱葷姸鎬佸喅瀹氫竴涓嚎紼嬩互浠涔堟牱鐨勬柟寮忔潵緇堟鑷繁銆傚湪涓婇潰鐨勪緥瀛愪腑錛屾垜浠噰鐢ㄤ簡綰跨▼鐨勯粯璁ゅ睘鎬э紝鍗充負闈炲垎紱葷姸鎬侊紝榪欑鎯呭喌涓嬶紝鍘熸湁鐨勭嚎紼嬬瓑寰呭垱寤虹殑綰跨▼緇撴潫銆傚彧鏈夊綋pthread_join錛堬級鍑芥暟榪斿洖鏃訛紝鍒涘緩鐨勭嚎紼嬫墠綆楃粓姝紝鎵嶈兘閲婃斁鑷繁鍗犵敤鐨勭郴緇熻祫婧愩傝屽垎紱葷嚎紼嬩笉鏄繖鏍峰瓙鐨勶紝瀹冩病鏈夎鍏朵粬鐨勭嚎紼嬫墍絳夊緟錛岃嚜宸辮繍琛岀粨鏉熶簡錛岀嚎紼嬩篃灝辯粓姝簡錛岄┈涓婇噴鏀劇郴緇熻祫婧愩傜▼搴忓憳搴旇鏍規嵁鑷繁鐨勯渶瑕侊紝閫夋嫨閫傚綋鐨勫垎紱葷姸鎬併傝緗嚎紼嬪垎紱葷姸鎬佺殑鍑芥暟涓簆thread_attr_setdetachstate錛坧thread_attr_t *attr, int detachstate錛夈傜浜屼釜鍙傛暟鍙変負PTHREAD_CREATE_DETACHED錛堝垎紱葷嚎紼嬶級鍜?PTHREAD _CREATE_JOINABLE錛堥潪鍒嗙綰跨▼錛夈傝繖閲岃娉ㄦ剰鐨勪竴鐐規槸錛屽鏋滆緗竴涓嚎紼嬩負鍒嗙綰跨▼錛岃岃繖涓嚎紼嬭繍琛屽張闈炲父蹇紝瀹冨緢鍙兘鍦╬thread_create鍑芥暟榪斿洖涔嬪墠灝辯粓姝簡錛屽畠緇堟浠ュ悗灝卞彲鑳藉皢綰跨▼鍙峰拰緋葷粺璧勬簮縐諱氦緇欏叾浠栫殑綰跨▼浣跨敤錛岃繖鏍瘋皟鐢╬thread_create鐨勭嚎紼嬪氨寰楀埌浜嗛敊璇殑綰跨▼鍙楓傝閬垮厤榪欑鎯呭喌鍙互閲囧彇涓瀹氱殑鍚屾鎺柦錛屾渶綆鍗曠殑鏂規硶涔嬩竴鏄彲浠ュ湪琚垱寤虹殑綰跨▼閲岃皟鐢╬thread_cond_timewait鍑芥暟錛岃榪欎釜綰跨▼絳夊緟涓浼氬効錛岀暀鍑鴻凍澶熺殑鏃墮棿璁╁嚱鏁皃thread_create榪斿洖銆傝緗竴孌電瓑寰呮椂闂達紝鏄湪澶氱嚎紼嬬紪紼嬮噷甯哥敤鐨勬柟娉曘備絾鏄敞鎰忎笉瑕佷嬌鐢ㄨ濡倃ait錛堬級涔嬬被鐨勫嚱鏁幫紝瀹冧滑鏄嬌鏁翠釜榪涚▼鐫$湢錛屽茍涓嶈兘瑙e喅綰跨▼鍚屾鐨勯棶棰樸?br><br>銆銆鍙﹀涓涓彲鑳藉父鐢ㄧ殑灞炴ф槸綰跨▼鐨勪紭鍏堢駭錛屽畠瀛樻斁鍦ㄧ粨鏋剆ched_param涓傜敤鍑芥暟pthread_attr_getschedparam鍜屽嚱鏁皃thread_attr_setschedparam榪涜瀛樻斁錛屼竴鑸鏉ワ紝鎴戜滑鎬繪槸鍏堝彇浼樺厛綰э紝瀵瑰彇寰楃殑鍊間慨鏀瑰悗鍐嶅瓨鏀懼洖鍘匯備笅闈㈠嵆鏄竴孌電畝鍗曠殑渚嬪瓙銆?<br><br> <table align=center bgColor=#e3e3e3 border=1> <tbody> <tr> <td>#include <pthread.h><br>#include <sched.h><br>pthread_attr_t attr;<br>pthread_t tid;<br>sched_param param;<br>int newprio=20;<br><br>pthread_attr_init(&attr);<br>pthread_attr_getschedparam(&attr, &param);<br>param.sched_priority=newprio;<br>pthread_attr_setschedparam(&attr, &param);<br>pthread_create(&tid, &attr, (void *)myfunction, myarg);</td> </tr> </tbody> </table> <strong>綰跨▼鐨勬暟鎹鐞?br><br></strong>銆銆鍜岃繘紼嬬浉姣旓紝綰跨▼鐨勬渶澶т紭鐐逛箣涓鏄暟鎹殑鍏變韓鎬э紝鍚勪釜榪涚▼鍏變韓鐖惰繘紼嬪娌胯鐨勬暟鎹錛屽彲浠ユ柟渚跨殑鑾峰緱銆佷慨鏀規暟鎹備絾榪欎篃緇欏綰跨▼緙栫▼甯︽潵浜嗚澶氶棶棰樸傛垜浠繀欏誨綋蹇冩湁澶氫釜涓嶅悓鐨勮繘紼嬭闂浉鍚岀殑鍙橀噺銆傝澶氬嚱鏁版槸涓嶅彲閲嶅叆鐨勶紝鍗沖悓鏃朵笉鑳借繍琛屼竴涓嚱鏁扮殑澶氫釜鎷瘋礉錛堥櫎闈炰嬌鐢ㄤ笉鍚岀殑鏁版嵁孌碉級銆傚湪鍑芥暟涓0鏄庣殑闈欐佸彉閲忓父甯稿甫鏉ラ棶棰橈紝鍑芥暟鐨勮繑鍥炲間篃浼氭湁闂銆傚洜涓哄鏋滆繑鍥炵殑鏄嚱鏁板唴閮ㄩ潤鎬佸0鏄庣殑絀洪棿鐨勫湴鍧錛屽垯鍦ㄤ竴涓嚎紼嬭皟鐢ㄨ鍑芥暟寰楀埌鍦板潃鍚庝嬌鐢ㄨ鍦板潃鎸囧悜鐨勬暟鎹椂錛屽埆鐨勭嚎紼嬪彲鑳借皟鐢ㄦ鍑芥暟騫朵慨鏀逛簡榪欎竴孌墊暟鎹傚湪榪涚▼涓叡浜殑鍙橀噺蹇呴』鐢ㄥ叧閿瓧volatile鏉ュ畾涔夛紝榪欐槸涓轟簡闃叉緙栬瘧鍣ㄥ湪浼樺寲鏃訛紙濡俫cc涓嬌鐢?OX鍙傛暟錛夋敼鍙樺畠浠殑浣跨敤鏂瑰紡銆備負浜嗕繚鎶ゅ彉閲忥紝鎴戜滑蹇呴』浣跨敤淇″彿閲忋佷簰鏂ョ瓑鏂規硶鏉ヤ繚璇佹垜浠鍙橀噺鐨勬紜嬌鐢ㄣ備笅闈紝鎴戜滑灝遍愭浠嬬粛澶勭悊綰跨▼鏁版嵁鏃剁殑鏈夊叧鐭ヨ瘑銆?br><br>銆銆1銆佺嚎紼嬫暟鎹?br><br>銆銆鍦ㄥ崟綰跨▼鐨勭▼搴忛噷錛屾湁涓ょ鍩烘湰鐨勬暟鎹細鍏ㄥ眬鍙橀噺鍜屽眬閮ㄥ彉閲忋備絾鍦ㄥ綰跨▼紼嬪簭閲岋紝榪樻湁絎笁縐嶆暟鎹被鍨嬶細綰跨▼鏁版嵁錛圱SD: Thread-Specific Data錛夈傚畠鍜屽叏灞鍙橀噺寰堣薄錛屽湪綰跨▼鍐呴儴錛屽悇涓嚱鏁板彲浠ヨ薄浣跨敤鍏ㄥ眬鍙橀噺涓鏍瘋皟鐢ㄥ畠錛屼絾瀹冨綰跨▼澶栭儴鐨勫叾瀹冪嚎紼嬫槸涓嶅彲瑙佺殑銆傝繖縐嶆暟鎹殑蹇呰鎬ф槸鏄捐屾槗瑙佺殑銆備緥濡傛垜浠父瑙佺殑鍙橀噺errno錛屽畠榪斿洖鏍囧噯鐨勫嚭閿欎俊鎭傚畠鏄劇劧涓嶈兘鏄竴涓眬閮ㄥ彉閲忥紝鍑犱箮姣忎釜鍑芥暟閮藉簲璇ュ彲浠ヨ皟鐢ㄥ畠錛涗絾瀹冨張涓嶈兘鏄竴涓叏灞鍙橀噺錛屽惁鍒欏湪A綰跨▼閲岃緭鍑虹殑寰堝彲鑳芥槸B綰跨▼鐨勫嚭閿欎俊鎭傝瀹炵幇璇稿姝ょ被鐨勫彉閲忥紝鎴戜滑灝卞繀欏諱嬌鐢ㄧ嚎紼嬫暟鎹傛垜浠負姣忎釜綰跨▼鏁版嵁鍒涘緩涓涓敭錛屽畠鍜岃繖涓敭鐩稿叧鑱旓紝鍦ㄥ悇涓嚎紼嬮噷錛岄兘浣跨敤榪欎釜閿潵鎸囦唬綰跨▼鏁版嵁錛屼絾鍦ㄤ笉鍚岀殑綰跨▼閲岋紝榪欎釜閿唬琛ㄧ殑鏁版嵁鏄笉鍚岀殑錛屽湪鍚屼竴涓嚎紼嬮噷錛屽畠浠h〃鍚屾牱鐨勬暟鎹唴瀹廣?br><br>銆銆鍜岀嚎紼嬫暟鎹浉鍏崇殑鍑芥暟涓昏鏈?涓細鍒涘緩涓涓敭錛涗負涓涓敭鎸囧畾綰跨▼鏁版嵁錛涗粠涓涓敭璇誨彇綰跨▼鏁版嵁錛涘垹闄ら敭銆?br><br>銆銆鍒涘緩閿殑鍑芥暟鍘熷瀷涓猴細<br><br> <table align=center bgColor=#e3e3e3 border=1> <tbody> <tr> <td>extern int pthread_key_create __P ((pthread_key_t *__key,void (*__destr_function) (void *)));</td> </tr> </tbody> </table> 銆銆<br>銆銆絎竴涓弬鏁頒負鎸囧悜涓涓敭鍊肩殑鎸囬拡錛岀浜屼釜鍙傛暟鎸囨槑浜嗕竴涓猟estructor鍑芥暟錛屽鏋滆繖涓弬鏁頒笉涓虹┖錛岄偅涔堝綋姣忎釜綰跨▼緇撴潫鏃訛紝緋葷粺灝嗚皟鐢ㄨ繖涓嚱鏁版潵閲婃斁緇戝畾鍦ㄨ繖涓敭涓婄殑<a target=_blank><font color=#000000><u>鍐呭瓨</u></font></a>鍧椼傝繖涓嚱鏁板父鍜屽嚱鏁皃thread_once ((pthread_once_t*once_control, void (*initroutine) (void)))涓璧蜂嬌鐢紝涓轟簡璁╄繖涓敭鍙鍒涘緩涓嬈°傚嚱鏁皃thread_once澹版槑涓涓垵濮嬪寲鍑芥暟錛岀涓嬈¤皟鐢╬thread_once鏃跺畠鎵ц榪欎釜鍑芥暟錛屼互鍚庣殑璋冪敤灝嗚瀹冨拷鐣ャ?br><br>銆銆鍦ㄤ笅闈㈢殑渚嬪瓙涓紝鎴戜滑鍒涘緩涓涓敭錛屽茍灝嗗畠鍜屾煇涓暟鎹浉鍏寵仈銆傛垜浠瀹氫箟涓涓嚱鏁癱reateWindow錛岃繖涓嚱鏁板畾涔変竴涓浘褰㈢獥鍙o紙鏁版嵁綾誨瀷涓篎l_Window *錛岃繖鏄浘褰㈢晫闈㈠紑鍙戝伐鍏稦LTK涓殑鏁版嵁綾誨瀷錛夈傜敱浜庡悇涓嚎紼嬮兘浼氳皟鐢ㄨ繖涓嚱鏁幫紝鎵浠ユ垜浠嬌鐢ㄧ嚎紼嬫暟鎹?br><br> <table align=center bgColor=#e3e3e3 border=1> <tbody> <tr> <td>/* 澹版槑涓涓敭*/<br>pthread_key_t myWinKey;<br>/* 鍑芥暟 createWindow */<br>void createWindow ( void ) {<br>銆Fl_Window * win;<br>銆static pthread_once_t once= PTHREAD_ONCE_INIT;<br>銆/* 璋冪敤鍑芥暟createMyKey錛屽垱寤洪敭*/<br>銆pthread_once ( & once, createMyKey) ;<br>銆/*win鎸囧悜涓涓柊寤虹珛鐨勭獥鍙?/<br>銆win=new Fl_Window( 0, 0, 100, 100, "MyWindow");<br>銆/* 瀵規紿楀彛浣滀竴浜涘彲鑳界殑璁劇疆宸ヤ綔錛屽澶у皬銆佷綅緗佸悕縐扮瓑*/<br>銆setWindow(win);<br>銆/* 灝嗙獥鍙f寚閽堝肩粦瀹氬湪閿甿yWinKey涓?/<br>銆pthread_setpecific ( myWinKey, win);<br>}<br><br>/* 鍑芥暟 createMyKey錛屽垱寤轟竴涓敭錛屽茍鎸囧畾浜哾estructor */<br>void createMyKey ( void ) {<br>銆pthread_keycreate(&myWinKey, freeWinKey);<br>}<br><br>/* 鍑芥暟 freeWinKey錛岄噴鏀劇┖闂?/<br>void freeWinKey ( Fl_Window * win){<br>銆delete win;<br>}</td> </tr> </tbody> </table> <br>銆銆榪欐牱錛屽湪涓嶅悓鐨勭嚎紼嬩腑璋冪敤鍑芥暟createMyWin錛岄兘鍙互寰楀埌鍦ㄧ嚎紼嬪唴閮ㄥ潎鍙鐨勭獥鍙e彉閲忥紝榪欎釜鍙橀噺閫氳繃鍑芥暟pthread_getspecific寰楀埌銆傚湪涓婇潰鐨勪緥瀛愪腑錛屾垜浠凡緇忎嬌鐢ㄤ簡鍑芥暟pthread_setspecific鏉ュ皢綰跨▼鏁版嵁鍜屼竴涓敭緇戝畾鍦ㄤ竴璧楓傝繖涓や釜鍑芥暟鐨勫師鍨嬪涓嬶細<br><br> <table align=center bgColor=#e3e3e3 border=1> <tbody> <tr> <td>銆銆extern int pthread_setspecific __P ((pthread_key_t __key,__const void *__pointer));<br>銆銆extern void *pthread_getspecific __P ((pthread_key_t __key));</td> </tr> </tbody> </table> <br>銆銆榪欎袱涓嚱鏁扮殑鍙傛暟鎰忎箟鍜屼嬌鐢ㄦ柟娉曟槸鏄捐屾槗瑙佺殑銆傝娉ㄦ剰鐨勬槸錛岀敤pthread_setspecific涓轟竴涓敭鎸囧畾鏂扮殑綰跨▼鏁版嵁鏃訛紝蹇呴』鑷繁閲婃斁鍘熸湁鐨勭嚎紼嬫暟鎹互鍥炴敹絀洪棿銆傝繖涓繃紼嬪嚱鏁皃thread_key_delete鐢ㄦ潵鍒犻櫎涓涓敭錛岃繖涓敭鍗犵敤鐨勫唴瀛樺皢琚噴鏀撅紝浣嗗悓鏍瘋娉ㄦ剰鐨勬槸錛屽畠鍙噴鏀鵑敭鍗犵敤鐨勫唴瀛橈紝騫朵笉閲婃斁璇ラ敭鍏寵仈鐨勭嚎紼嬫暟鎹墍鍗犵敤鐨勫唴瀛樿祫婧愶紝鑰屼笖瀹冧篃涓嶄細瑙﹀彂鍑芥暟pthread_key_create涓畾涔夌殑destructor鍑芥暟銆傜嚎紼嬫暟鎹殑閲婃斁蹇呴』鍦ㄩ噴鏀鵑敭涔嬪墠瀹屾垚銆?br><br>銆銆2銆佷簰鏂ラ攣<br><br>銆銆浜掓枼閿佺敤鏉ヤ繚璇佷竴孌墊椂闂村唴鍙湁涓涓嚎紼嬪湪鎵ц涓孌典唬鐮併傚繀瑕佹ф樉鑰屾槗瑙侊細鍋囪鍚勪釜綰跨▼鍚戝悓涓涓枃浠墮『搴忓啓鍏ユ暟鎹紝鏈鍚庡緱鍒扮殑緇撴灉涓瀹氭槸鐏鵑毦鎬х殑銆?br><br>銆銆鎴戜滑鍏堢湅涓嬮潰涓孌典唬鐮併傝繖鏄竴涓/鍐欑▼搴忥紝瀹冧滑鍏敤涓涓紦鍐插尯錛屽茍涓旀垜浠亣瀹氫竴涓紦鍐插尯鍙兘淇濆瓨涓鏉′俊鎭傚嵆緙撳啿鍖哄彧鏈変袱涓姸鎬侊細鏈変俊鎭垨娌℃湁淇℃伅銆?br><br> <table align=center bgColor=#e3e3e3 border=1> <tbody> <tr> <td>void reader_function ( void );<br>void writer_function ( void ); <br><br>char buffer;<br>int buffer_has_item=0;<br>pthread_mutex_t mutex;<br>struct timespec delay;<br>void main ( void ){<br>銆pthread_t reader;<br>銆/* 瀹氫箟寤惰繜鏃墮棿*/<br>銆delay.tv_sec = 2;<br>銆delay.tv_nec = 0;<br>銆/* 鐢ㄩ粯璁ゅ睘鎬у垵濮嬪寲涓涓簰鏂ラ攣瀵硅薄*/<br>銆pthread_mutex_init (&mutex,NULL);<br>銆pthread_create(&reader, pthread_attr_default, (void *)&reader_function), NULL);<br>銆writer_function( );<br>}<br><br>void writer_function (void){<br>銆while(1){<br>銆銆/* 閿佸畾浜掓枼閿?/<br>銆銆pthread_mutex_lock (&mutex);<br>銆銆if (buffer_has_item==0){<br>銆銆銆buffer=make_new_item( );<br>銆銆銆buffer_has_item=1;<br>銆銆}<br>銆銆/* 鎵撳紑浜掓枼閿?/<br>銆銆pthread_mutex_unlock(&mutex);<br>銆銆pthread_delay_np(&delay);<br>銆}<br>}<br><br>void reader_function(void){<br>銆while(1){<br>銆銆pthread_mutex_lock(&mutex);<br>銆銆if(buffer_has_item==1){<br>銆銆銆consume_item(buffer);<br>銆銆銆buffer_has_item=0;<br>銆銆}<br>銆銆pthread_mutex_unlock(&mutex);<br>銆銆pthread_delay_np(&delay);<br>銆}<br>}</td> </tr> </tbody> </table> <br>銆銆榪欓噷澹版槑浜嗕簰鏂ラ攣鍙橀噺mutex錛岀粨鏋刾thread_mutex_t涓轟笉鍏紑鐨勬暟鎹被鍨嬶紝鍏朵腑鍖呭惈涓涓郴緇熷垎閰嶇殑灞炴у璞°傚嚱鏁皃thread_mutex_init鐢ㄦ潵鐢熸垚涓涓簰鏂ラ攣銆侼ULL鍙傛暟琛ㄦ槑浣跨敤榛樿灞炴с傚鏋滈渶瑕佸0鏄庣壒瀹氬睘鎬х殑浜掓枼閿侊紝欏昏皟鐢ㄥ嚱鏁皃thread_mutexattr_init銆傚嚱鏁皃thread_mutexattr_setpshared鍜屽嚱鏁皃thread_mutexattr_settype鐢ㄦ潵璁劇疆浜掓枼閿佸睘鎬с傚墠涓涓嚱鏁拌緗睘鎬shared錛屽畠鏈変袱涓彇鍊鹼紝PTHREAD_PROCESS_PRIVATE鍜孭THREAD_PROCESS_SHARED銆傚墠鑰呯敤鏉ヤ笉鍚岃繘紼嬩腑鐨勭嚎紼嬪悓姝ワ紝鍚庤呯敤浜庡悓姝ユ湰榪涚▼鐨勪笉鍚岀嚎紼嬨傚湪涓婇潰鐨勪緥瀛愪腑錛屾垜浠嬌鐢ㄧ殑鏄粯璁ゅ睘鎬THREAD_PROCESS_ PRIVATE銆傚悗鑰呯敤鏉ヨ緗簰鏂ラ攣綾誨瀷錛屽彲閫夌殑綾誨瀷鏈塒THREAD_MUTEX_NORMAL銆丳THREAD_MUTEX_ERRORCHECK銆丳THREAD_MUTEX_RECURSIVE鍜孭THREAD _MUTEX_DEFAULT銆傚畠浠垎鍒畾涔変簡涓嶅悓鐨勪笂鎵銆佽В閿佹満鍒訛紝涓鑸儏鍐典笅錛岄夌敤鏈鍚庝竴涓粯璁ゅ睘鎬с?br><br>銆銆pthread_mutex_lock澹版槑寮濮嬬敤浜掓枼閿佷笂閿侊紝姝ゅ悗鐨勪唬鐮佺洿鑷寵皟鐢╬thread_mutex_unlock涓烘錛屽潎琚笂閿侊紝鍗沖悓涓鏃墮棿鍙兘琚竴涓嚎紼嬭皟鐢ㄦ墽琛屻傚綋涓涓嚎紼嬫墽琛屽埌pthread_mutex_lock澶勬椂錛屽鏋滆閿佹鏃惰鍙︿竴涓嚎紼嬩嬌鐢紝閭f綰跨▼琚樆濉烇紝鍗崇▼搴忓皢絳夊緟鍒板彟涓涓嚎紼嬮噴鏀炬浜掓枼閿併傚湪涓婇潰鐨勪緥瀛愪腑錛屾垜浠嬌鐢ㄤ簡pthread_delay_np鍑芥暟錛岃綰跨▼鐫$湢涓孌墊椂闂達紝灝辨槸涓轟簡闃叉涓涓嚎紼嬪緇堝崰鎹鍑芥暟銆?br><br>銆銆涓婇潰鐨勪緥瀛愰潪甯哥畝鍗曪紝灝變笉鍐嶄粙緇嶄簡錛岄渶瑕佹彁鍑虹殑鏄湪浣跨敤浜掓枼閿佺殑榪囩▼涓緢鏈夊彲鑳戒細鍑虹幇姝婚攣錛氫袱涓嚎紼嬭瘯鍥懼悓鏃跺崰鐢ㄤ袱涓祫婧愶紝騫舵寜涓嶅悓鐨勬搴忛攣瀹氱浉搴旂殑浜掓枼閿侊紝渚嬪涓や釜綰跨▼閮介渶瑕侀攣瀹氫簰鏂ラ攣1鍜屼簰鏂ラ攣2錛宎綰跨▼鍏堥攣瀹氫簰鏂ラ攣1錛宐綰跨▼鍏堥攣瀹氫簰鏂ラ攣2錛岃繖鏃跺氨鍑虹幇浜嗘閿併傛鏃舵垜浠彲浠ヤ嬌鐢ㄥ嚱鏁皃thread_mutex_trylock錛屽畠鏄嚱鏁皃thread_mutex_lock鐨勯潪闃誨鐗堟湰錛屽綋瀹冨彂鐜版閿佷笉鍙伩鍏嶆椂錛屽畠浼氳繑鍥炵浉搴旂殑淇℃伅錛岀▼搴忓憳鍙互閽堝姝婚攣鍋氬嚭鐩稿簲鐨勫鐞嗐傚彟澶栦笉鍚岀殑浜掓枼閿佺被鍨嬪姝婚攣鐨勫鐞嗕笉涓鏍鳳紝浣嗘渶涓昏鐨勮繕鏄紼嬪簭鍛樿嚜宸卞湪紼嬪簭璁捐娉ㄦ剰榪欎竴鐐廣?br><br>銆銆3銆佹潯浠跺彉閲?br><br>銆銆鍓嶄竴鑺備腑鎴戜滑璁茶堪浜嗗浣曚嬌鐢ㄤ簰鏂ラ攣鏉ュ疄鐜扮嚎紼嬮棿鏁版嵁鐨勫叡浜拰閫氫俊錛屼簰鏂ラ攣涓涓槑鏄劇殑緙虹偣鏄畠鍙湁涓ょ鐘舵侊細閿佸畾鍜岄潪閿佸畾銆傝屾潯浠跺彉閲忛氳繃鍏佽綰跨▼闃誨鍜岀瓑寰呭彟涓涓嚎紼嬪彂閫佷俊鍙風殑鏂規硶寮ヨˉ浜嗕簰鏂ラ攣鐨勪笉瓚籌紝瀹冨父鍜屼簰鏂ラ攣涓璧蜂嬌鐢ㄣ備嬌鐢ㄦ椂錛屾潯浠跺彉閲忚鐢ㄦ潵闃誨涓涓嚎紼嬶紝褰撴潯浠朵笉婊¤凍鏃訛紝綰跨▼寰寰瑙e紑鐩稿簲鐨勪簰鏂ラ攣騫剁瓑寰呮潯浠跺彂鐢熷彉鍖栥備竴鏃﹀叾瀹冪殑鏌愪釜綰跨▼鏀瑰彉浜嗘潯浠跺彉閲忥紝瀹冨皢閫氱煡鐩稿簲鐨勬潯浠跺彉閲忓敜閱掍竴涓垨澶氫釜姝h姝ゆ潯浠跺彉閲忛樆濉炵殑綰跨▼銆傝繖浜涚嚎紼嬪皢閲嶆柊閿佸畾浜掓枼閿佸茍閲嶆柊嫻嬭瘯鏉′歡鏄惁婊¤凍銆備竴鑸鏉ワ紝鏉′歡鍙橀噺琚敤鏉ヨ繘琛岀嚎鎵塊棿鐨勫悓姝ャ?<br><br>銆銆鏉′歡鍙橀噺鐨勭粨鏋勪負pthread_cond_t錛屽嚱鏁皃thread_cond_init錛堬級琚敤鏉ュ垵濮嬪寲涓涓潯浠跺彉閲忋傚畠鐨勫師鍨嬩負錛?br><br>銆銆extern int pthread_cond_init __P ((pthread_cond_t *__cond,__const pthread_condattr_t *__cond_attr));<br><br>銆銆鍏朵腑cond鏄竴涓寚鍚戠粨鏋刾thread_cond_t鐨勬寚閽堬紝cond_attr鏄竴涓寚鍚戠粨鏋刾thread_condattr_t鐨勬寚閽堛傜粨鏋刾thread_condattr_t鏄潯浠跺彉閲忕殑灞炴х粨鏋勶紝鍜屼簰鏂ラ攣涓鏍鋒垜浠彲浠ョ敤瀹冩潵璁劇疆鏉′歡鍙橀噺鏄繘紼嬪唴鍙敤榪樻槸榪涚▼闂村彲鐢紝榛樿鍊兼槸PTHREAD_ PROCESS_PRIVATE錛屽嵆姝ゆ潯浠跺彉閲忚鍚屼竴榪涚▼鍐呯殑鍚勪釜綰跨▼浣跨敤銆傛敞鎰忓垵濮嬪寲鏉′歡鍙橀噺鍙湁鏈浣跨敤鏃舵墠鑳介噸鏂板垵濮嬪寲鎴栬閲婃斁銆傞噴鏀句竴涓潯浠跺彉閲忕殑鍑芥暟涓簆thread_cond_ destroy錛坧thread_cond_t cond錛夈傘<br><br>銆銆鍑芥暟pthread_cond_wait錛堬級浣跨嚎紼嬮樆濉炲湪涓涓潯浠跺彉閲忎笂銆傚畠鐨勫嚱鏁板師鍨嬩負錛?br><br>銆銆extern int pthread_cond_wait __P ((pthread_cond_t *__cond,pthread_mutex_t *__mutex));<br><br>銆銆綰跨▼瑙e紑mutex鎸囧悜鐨勯攣騫惰鏉′歡鍙橀噺cond闃誨銆傜嚎紼嬪彲浠ヨ鍑芥暟pthread_cond_signal鍜屽嚱鏁皃thread_cond_broadcast鍞ら啋錛屼絾鏄娉ㄦ剰鐨勬槸錛屾潯浠跺彉閲忓彧鏄搗闃誨鍜屽敜閱掔嚎紼嬬殑浣滅敤錛屽叿浣撶殑鍒ゆ柇鏉′歡榪橀渶鐢ㄦ埛緇欏嚭錛屼緥濡備竴涓彉閲忔槸鍚︿負0絳夌瓑錛岃繖涓鐐規垜浠粠鍚庨潰鐨勪緥瀛愪腑鍙互鐪嬪埌銆傜嚎紼嬭鍞ら啋鍚庯紝瀹冨皢閲嶆柊媯鏌ュ垽鏂潯浠舵槸鍚︽弧瓚籌紝濡傛灉榪樹笉婊¤凍錛屼竴鑸鏉ョ嚎紼嬪簲璇ヤ粛闃誨鍦ㄨ繖閲岋紝琚瓑寰呰涓嬩竴嬈″敜閱掋傝繖涓繃紼嬩竴鑸敤while璇彞瀹炵幇銆?br><br>銆銆鍙︿竴涓敤鏉ラ樆濉炵嚎紼嬬殑鍑芥暟鏄痯thread_cond_timedwait錛堬級錛屽畠鐨勫師鍨嬩負錛?br>銆銆extern int pthread_cond_timedwait __P ((pthread_cond_t *__cond,pthread_mutex_t *__mutex, __const struct timespec *__abstime));<br><br>銆銆瀹冩瘮鍑芥暟pthread_cond_wait錛堬級澶氫簡涓涓椂闂村弬鏁幫紝緇忓巻abstime孌墊椂闂村悗錛屽嵆浣挎潯浠跺彉閲忎笉婊¤凍錛岄樆濉炰篃琚В闄ゃ?br><br>銆銆鍑芥暟pthread_cond_signal錛堬級鐨勫師鍨嬩負錛?br><br>銆銆extern int pthread_cond_signal __P ((pthread_cond_t *__cond));<br><br>銆銆瀹冪敤鏉ラ噴鏀捐闃誨鍦ㄦ潯浠跺彉閲廲ond涓婄殑涓涓嚎紼嬨傚涓嚎紼嬮樆濉炲湪姝ゆ潯浠跺彉閲忎笂鏃訛紝鍝竴涓嚎紼嬭鍞ら啋鏄敱綰跨▼鐨勮皟搴︾瓥鐣ユ墍鍐沖畾鐨勩傝娉ㄦ剰鐨勬槸錛屽繀欏葷敤淇濇姢鏉′歡鍙橀噺鐨勪簰鏂ラ攣鏉ヤ繚鎶よ繖涓嚱鏁幫紝鍚﹀垯鏉′歡婊¤凍淇″彿鍙堝彲鑳藉湪嫻嬭瘯鏉′歡鍜岃皟鐢╬thread_cond_wait鍑芥暟涔嬮棿琚彂鍑猴紝浠庤岄犳垚鏃犻檺鍒剁殑絳夊緟銆備笅闈㈡槸浣跨敤鍑芥暟pthread_cond_wait錛堬級鍜屽嚱鏁皃thread_cond_signal錛堬級鐨勪竴涓畝鍗曠殑渚嬪瓙銆?br><br> <table align=center bgColor=#e3e3e3 border=1> <tbody> <tr> <td>pthread_mutex_t count_lock;<br>pthread_cond_t count_nonzero;<br>unsigned count;<br>decrement_count銆() {<br>銆pthread_mutex_lock (&count_lock);<br>銆while(count==0) <br>銆銆pthread_cond_wait( &count_nonzero, &count_lock);<br>銆銆count=count -1;<br>銆pthread_mutex_unlock (&count_lock);<br>}<br><br>increment_count(){<br>銆pthread_mutex_lock(&count_lock);<br>銆if(count==0)<br>銆銆pthread_cond_signal(&count_nonzero);<br>銆銆count=count+1;<br>銆pthread_mutex_unlock(&count_lock);<br>}</td> </tr> </tbody> </table> <br>銆銆count鍊間負0鏃訛紝decrement鍑芥暟鍦╬thread_cond_wait澶勮闃誨錛屽茍鎵撳紑浜掓枼閿乧ount_lock銆傛鏃訛紝褰撹皟鐢ㄥ埌鍑芥暟increment_count鏃訛紝pthread_cond_signal錛堬級鍑芥暟鏀瑰彉鏉′歡鍙橀噺錛屽憡鐭ecrement_count錛堬級鍋滄闃誨銆傝鑰呭彲浠ヨ瘯鐫璁╀袱涓嚎紼嬪垎鍒繍琛岃繖涓や釜鍑芥暟錛岀湅鐪嬩細鍑虹幇浠涔堟牱鐨勭粨鏋溿?br><br>銆銆鍑芥暟pthread_cond_broadcast錛坧thread_cond_t *cond錛夌敤鏉ュ敜閱掓墍鏈夎闃誨鍦ㄦ潯浠跺彉閲廲ond涓婄殑綰跨▼銆傝繖浜涚嚎紼嬭鍞ら啋鍚庡皢鍐嶆绔炰簤鐩稿簲鐨勪簰鏂ラ攣錛屾墍浠ュ繀欏誨皬蹇冧嬌鐢ㄨ繖涓嚱鏁般?br><br>銆銆4銆佷俊鍙烽噺<br><br>銆銆淇″彿閲忔湰璐ㄤ笂鏄竴涓潪璐熺殑鏁存暟璁℃暟鍣紝瀹冭鐢ㄦ潵鎺у埗瀵瑰叕鍏辮祫婧愮殑璁塊棶銆傚綋鍏叡璧勬簮澧炲姞鏃訛紝璋冪敤鍑芥暟sem_post錛堬級澧炲姞淇″彿閲忋傚彧鏈夊綋淇″彿閲忓煎ぇ浜庯紣鏃訛紝鎵嶈兘浣跨敤鍏叡璧勬簮錛屼嬌鐢ㄥ悗錛屽嚱鏁皊em_wait錛堬級鍑忓皯淇″彿閲忋傚嚱鏁皊em_trywait錛堬級鍜屽嚱鏁皃thread_ mutex_trylock錛堬級璧峰悓鏍風殑浣滅敤錛屽畠鏄嚱鏁皊em_wait錛堬級鐨勯潪闃誨鐗堟湰銆備笅闈㈡垜浠愪釜浠嬬粛鍜屼俊鍙烽噺鏈夊叧鐨勪竴浜涘嚱鏁幫紝瀹冧滑閮藉湪澶存枃浠?usr/include/semaphore.h涓畾涔夈?br><br>銆銆淇″彿閲忕殑鏁版嵁綾誨瀷涓虹粨鏋剆em_t錛屽畠鏈川涓婃槸涓涓暱鏁村瀷鐨勬暟銆傚嚱鏁皊em_init錛堬級鐢ㄦ潵鍒濆鍖栦竴涓俊鍙烽噺銆傚畠鐨勫師鍨嬩負錛?br><br>銆銆extern int sem_init __P ((sem_t *__sem, int __pshared, unsigned int __value));<br><br>銆銆sem涓烘寚鍚戜俊鍙烽噺緇撴瀯鐨勪竴涓寚閽堬紱pshared涓嶄負錛愭椂姝や俊鍙烽噺鍦ㄨ繘紼嬮棿鍏變韓錛屽惁鍒欏彧鑳戒負褰撳墠榪涚▼鐨勬墍鏈夌嚎紼嬪叡浜紱value緇欏嚭浜嗕俊鍙烽噺鐨勫垵濮嬪箋?br><br>銆銆鍑芥暟sem_post( sem_t *sem )鐢ㄦ潵澧炲姞淇″彿閲忕殑鍊箋傚綋鏈夌嚎紼嬮樆濉炲湪榪欎釜淇″彿閲忎笂鏃訛紝璋冪敤榪欎釜鍑芥暟浼氫嬌鍏朵腑鐨勪竴涓嚎紼嬩笉鍦ㄩ樆濉烇紝閫夋嫨鏈哄埗鍚屾牱鏄敱綰跨▼鐨勮皟搴︾瓥鐣ュ喅瀹氱殑銆?br><br>銆銆鍑芥暟sem_wait( sem_t *sem )琚敤鏉ラ樆濉炲綋鍓嶇嚎紼嬬洿鍒頒俊鍙烽噺sem鐨勫煎ぇ浜?錛岃В闄ら樆濉炲悗灝唖em鐨勫煎噺涓錛岃〃鏄庡叕鍏辮祫婧愮粡浣跨敤鍚庡噺灝戙傚嚱鏁皊em_trywait ( sem_t *sem )鏄嚱鏁皊em_wait錛堬級鐨勯潪闃誨鐗堟湰錛屽畠鐩存帴灝嗕俊鍙烽噺sem鐨勫煎噺涓銆?br><br>銆銆鍑芥暟sem_destroy(sem_t *sem)鐢ㄦ潵閲婃斁淇″彿閲弒em銆?br><br>銆銆涓嬮潰鎴戜滑鏉ョ湅涓涓嬌鐢ㄤ俊鍙烽噺鐨勪緥瀛愩傚湪榪欎釜渚嬪瓙涓紝涓鍏辨湁4涓嚎紼嬶紝鍏朵腑涓や釜綰跨▼璐熻矗浠庢枃浠惰鍙栨暟鎹埌鍏叡鐨勭紦鍐插尯錛屽彟涓や釜綰跨▼浠庣紦鍐插尯璇誨彇鏁版嵁浣滀笉鍚岀殑澶勭悊錛堝姞鍜屼箻榪愮畻錛夈?br><br> <table align=center bgColor=#e3e3e3 border=1> <tbody> <tr> <td>/* File sem.c */<br>#include <stdio.h><br>#include <pthread.h><br>#include <semaphore.h><br>#define MAXSTACK 100<br>int stack[MAXSTACK][2];<br>int size=0;<br>sem_t sem;<br>/* 浠庢枃浠?.dat璇誨彇鏁版嵁錛屾瘡璇諱竴嬈★紝淇″彿閲忓姞涓*/<br>void ReadData1(void){<br>銆FILE *fp=fopen("1.dat","r");<br>銆while(!feof(fp)){<br>銆銆fscanf(fp,"%d %d",&stack[size][0],&stack[size][1]);<br>銆銆sem_post(&sem);<br>銆銆++size;<br>銆}<br>銆fclose(fp);<br>}<br>/*浠庢枃浠?.dat璇誨彇鏁版嵁*/<br>void ReadData2(void){<br>銆FILE *fp=fopen("2.dat","r");<br>銆while(!feof(fp)){<br>銆銆fscanf(fp,"%d %d",&stack[size][0],&stack[size][1]);<br>銆銆sem_post(&sem);<br>銆銆++size;<br>銆}<br>銆fclose(fp);<br>}<br>/*闃誨絳夊緟緙撳啿鍖烘湁鏁版嵁錛岃鍙栨暟鎹悗錛岄噴鏀劇┖闂達紝緇х畫絳夊緟*/<br>void HandleData1(void){<br>銆while(1){<br>銆銆sem_wait(&sem);<br>銆銆printf("Plus:%d+%d=%dn",stack[size][0],stack[size][1],<br>銆銆stack[size][0]+stack[size][1]);<br>銆銆--size;<br>銆}<br>}<br><br>void HandleData2(void){<br>銆while(1){<br>銆銆sem_wait(&sem);<br>銆銆printf("Multiply:%d*%d=%dn",stack[size][0],stack[size][1],<br>銆銆stack[size][0]*stack[size][1]);<br>銆銆--size;<br>銆}<br>}<br>int main(void){<br>銆pthread_t t1,t2,t3,t4;<br>銆sem_init(&sem,0,0);<br>銆pthread_create(&t1,NULL,(void *)HandleData1,NULL);<br>銆pthread_create(&t2,NULL,(void *)HandleData2,NULL);<br>銆pthread_create(&t3,NULL,(void *)ReadData1,NULL);<br>銆pthread_create(&t4,NULL,(void *)ReadData2,NULL);<br>銆/* 闃叉紼嬪簭榪囨棭閫鍑猴紝璁╁畠鍦ㄦ鏃犻檺鏈熺瓑寰?/<br>銆pthread_join(t1,NULL);<br>}</td> </tr> </tbody> </table> <br>銆銆鍦↙inux涓嬶紝鎴戜滑鐢ㄥ懡浠cc -lpthread sem.c -o sem鐢熸垚鍙墽琛屾枃浠秙em銆?鎴戜滑浜嬪厛緙栬緫濂芥暟鎹枃浠?.dat鍜?.dat錛屽亣璁懼畠浠殑鍐呭鍒嗗埆涓? 2 3 4 5 6 7 8 9 10鍜?-1 -2 -3 -4 -5 -6 -7 -8 -9 -10 錛屾垜浠繍琛宻em錛屽緱鍒板涓嬬殑緇撴灉錛?br><br>Multiply:-1*-2=2<br>Plus:-1+-2=-3<br>Multiply:9*10=90<br>Plus:-9+-10=-19<br>Multiply:-7*-8=56<br>Plus:-5+-6=-11<br>Multiply:-3*-4=12<br>Plus:9+10=19<br>Plus:7+8=15<br>Plus:5+6=11<br><br>銆銆浠庝腑鎴戜滑鍙互鐪嬪嚭鍚勪釜綰跨▼闂寸殑绔炰簤鍏崇郴銆傝屾暟鍊煎茍鏈寜鎴戜滑鍘熷厛鐨勯『搴忔樉紺哄嚭鏉ヨ繖鏄敱浜巗ize榪欎釜鏁板艱鍚勪釜綰跨▼浠繪剰淇敼鐨勭紭鏁呫傝繖涔熷線寰鏄綰跨▼緙栫▼瑕佹敞鎰忕殑闂銆?br> <img src ="http://www.shnenglu.com/ivy-jie/aggbug/87518.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/ivy-jie/" target="_blank">ivy-jie</a> 2009-06-12 19:47 <a href="http://www.shnenglu.com/ivy-jie/articles/87518.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Linux榪涚▼閫氫俊http://www.shnenglu.com/ivy-jie/articles/87516.htmlivy-jieivy-jieFri, 12 Jun 2009 11:45:00 GMThttp://www.shnenglu.com/ivy-jie/articles/87516.htmlhttp://www.shnenglu.com/ivy-jie/comments/87516.htmlhttp://www.shnenglu.com/ivy-jie/articles/87516.html#Feedback0http://www.shnenglu.com/ivy-jie/comments/commentRss/87516.htmlhttp://www.shnenglu.com/ivy-jie/services/trackbacks/87516.html1銆佺閬?pipe)

鐢ㄨ鍏鋒湁浜茬紭鍏崇郴榪涚▼闂寸殑閫氫俊

鍖垮悕涓嬈℃т嬌鐢ㄧ殑錛屽崐鍙屽伐銆備竴涓繘紼嬪線杈撳嚭绔啓綆¢亾錛屽彟涓涓繘紼嬩粠杈撳叆绔綆¢亾銆?br>  #include<unistd.h>
  int pipe(int fd[2]);
  fd[0]:琛ㄧず璇葷
  fd[1]:琛ㄧず鍐欑

 

2銆佹湁鍚嶇閬?named pipe)

鍏佽鏃犱翰緙樺叧緋昏繘紼嬮棿鐨勯氫俊

鏈夊悕綆¢亾錛屼綔涓虹壒鍒枃浠跺瓨鍌ㄤ簬鏂囦歡緋葷粺涓傛湁鍚嶇閬撲竴鏃﹀緩绔嬪氨瀛樺湪浜庢枃浠剁郴緇熶腑錛岄櫎闈炴樉紺虹殑unlink
  #include<sys/tpes.h>
  #include<sys/stat.h>
  int mknod(const char *path,mode_t mod,dev_t dev);
  int mkfifo(const char *path,mode_t mode);
  path:鍒涘緩鏈夊悕綆¢亾鐨勫叏璺緞鍚?br>  mod:鍒涘緩鏈夊悕綆¢亾鐨勬ā寮忥紝鎸囧瓨鍙栨潈闄?br>  dev:璁懼鍊鹼紝璇ュ煎彇鍐充簬鏂囦歡鍒涘緩鐨勭綾伙紝瀹冨彧鍦ㄥ垱寤鴻澶囨枃浠舵椂鎵嶄細鐢ㄥ埌
  娉ㄦ剰:鏈夊悕綆¢亾鍒涘緩鍚庡氨鍙互浣跨敤浜嗭紝鏈夊悕綆¢亾鍜岀閬撶殑浣跨敤鏂規硶鍩烘湰鏄浉鍚岀殑銆傚彧鏄嬌鐢ㄦ湁鍚嶇閬撶殑鏃跺欏繀欏誨厛璋冪敤open()灝嗗叾鎵撳紑
  鍥犱負鏈夊悕綆¢亾鏄竴涓瓨鍦ㄤ簬紜洏涓婄殑鏂囦歡錛岃岀閬撴槸瀛樺湪浜庡唴瀛樹腑鐨勭壒孌婃枃浠?/p>

  涓嬮潰鐨勭▼搴忎竴涓綆¢亾錛屽彟涓涓啓綆¢亾錛岃繖涓や釜鍑芥暟鐢ㄧ殑鏄潪闃誨璇誨啓綆¢亾

 

#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FIFO "/tmp/myfifo"

main(int argc, char** argv)
{
    char buf_r[100];
    int fd;
    int nread;
  
    if((mkfifo(FIFO,O_CREAT|O_EXCL)<0)&&(errno!=EEXIST))
        printf("cannot create fifoserver\n");
    printf("Preparing for reading bytes...\n");
    memset(buf_r,0,sizeof(buf_r));

    fd=open(FIFO,O_RDONLY|O_NONBLOCK,0);
    if(fd==-1)
    {
        perror("open");
        exit(1);
    }
    while(1)
    {
        memset(buf_r,0,sizeof(buf_r));
        if((nread=read(fd,buf_r,100))==-1){
            if(errno==EAGAIN)
                printf("no data yet\n");
     }
        printf("read %s from FIFO\n",buf_r);
        sleep(1);
    }
    pause();
    unlink(FIFO);
}

 


#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FIFO "/tmp/myfifo"

main(int argc,char** argv)
{
    int fd;
    char w_buf[100];
    int nwrite;
    if(fd==-1)
        if(errno==ENXIO)
            printf("open error; no reading process\n");
  
    fd=open(FIFO,O_WRONLY|O_NONBLOCK,0);
    if(argc==1)
        printf("Please send something\n");
    strcpy(w_buf,argv[1]);

    if((nwrite=write(fd,w_buf,100))==-1)
    {
        if(errno==EAGAIN)
            printf("The FIFO has not been read yet.Please try later\n");
    }
    else
        printf("write %s to the FIFO\n",w_buf);
}


3銆佷俊鍙烽噺

涓昏鐢ㄤ簬榪涚▼闂村強鍚屼竴榪涚▼涓嶅悓綰跨▼涔嬮棿鐨勫悓姝ユ墜孌?/p>


4銆佹秷鎭槦鍒?/p>

鍏嬫湇淇″彿閲忔湁闄愶紝鍙啓鍙


5銆佷俊鍙鳳紙Signal錛?/p>

姣旇緝澶嶆潅錛岀敤浜庨氱煡鎺ュ彈榪涚▼鏈夋煇浜嬪彂鐢?/p>


6銆佸叡浜唴瀛?/p>

鏈鏈夌敤鐨勮繘紼嬮棿閫氫俊鏂瑰紡錛屼嬌寰楀涓繘紼嬪彲璁塊棶鍚屼互鍐呭瓨絀洪棿錛屼絾闇瑕佷緷闈犳煇縐嶅悓姝ユ満鍒?/p>

絎竴姝ワ細鍒涘緩鍏變韓鍐呭瓨

絎簩姝ワ細鏄犲皠鍏變韓鍐呭瓨


7銆佸鎺ュ瓧

涓嶅悓鏈哄櫒涔嬮棿閫氫俊

 



ivy-jie 2009-06-12 19:45 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            一区二区三区国产| 亚洲高清视频的网址| 性视频1819p久久| 亚洲欧美国产精品va在线观看 | 黄色在线一区| 黄色工厂这里只有精品| 在线免费精品视频| 日韩一二在线观看| 香蕉av777xxx色综合一区| 亚洲欧美日韩精品久久亚洲区| 亚洲尤物视频网| 久久久久久久综合日本| 美女图片一区二区| 欧美激情视频免费观看| 亚洲韩国日本中文字幕| 亚洲国产日韩欧美在线99 | 亚洲一区二区三区精品视频 | 欧美日韩1234| 国产偷久久久精品专区| 亚洲精品中文字幕有码专区| 午夜国产精品影院在线观看| 欧美a级片一区| 在线亚洲欧美视频| 久久手机精品视频| 欧美视频中文一区二区三区在线观看| 国产伦精品一区二区三区照片91| 亚洲大片免费看| 午夜久久久久久| 欧美黑人一区二区三区| 午夜精品久久久久久久99热浪潮 | 久久成人av少妇免费| 欧美成人免费大片| 国产久一道中文一区| 日韩亚洲不卡在线| 久久青草欧美一区二区三区| 99在线|亚洲一区二区| 久久一本综合频道| 国产精品一区二区久久久| 亚洲精品中文字幕在线观看| 麻豆精品传媒视频| 亚洲一区二区三区精品在线观看 | 国产精品五月天| 99视频国产精品免费观看| 久久亚洲精品一区二区| 亚洲欧美日韩高清| 欧美午夜视频网站| 亚洲老司机av| 免费欧美视频| 久久九九热re6这里有精品| 国产精品视频成人| 亚洲一区二区在线免费观看视频| 男女视频一区二区| 久久精品视频亚洲| 黄色小说综合网站| 久久久久久夜| 欧美一区二区三区另类| 国产视频久久网| 校园激情久久| 亚洲深爱激情| 国产精品久久久久久久第一福利| 99pao成人国产永久免费视频| 女人香蕉久久**毛片精品| 久色成人在线| 亚洲精品一区二区三| 亚洲国产精品久久久久婷婷884 | 亚洲欧美第一页| 亚洲影视综合| 国产午夜精品理论片a级大结局 | 一本色道久久综合狠狠躁篇的优点| 欧美成人小视频| 亚洲作爱视频| 一区二区高清视频| 国产九色精品成人porny| 欧美中文在线观看国产| 欧美一级在线亚洲天堂| 伊人婷婷欧美激情| 亚洲国产一区视频| 国产精品国产一区二区| 欧美一级播放| 欧美不卡视频一区| 亚洲国产成人porn| 一本久道久久综合中文字幕| 国产精品资源| 日韩一级裸体免费视频| 国产午夜精品久久久久久久| 一区二区日韩免费看| 亚洲视频观看| 欧美精品在线免费| 亚洲人成网站色ww在线| 尤妮丝一区二区裸体视频| 亚洲一区二区少妇| 亚洲视频网在线直播| 欧美ed2k| 99国产成+人+综合+亚洲欧美| 亚洲欧洲精品一区二区三区 | 蜜臀va亚洲va欧美va天堂| 国产香蕉久久精品综合网| 亚洲欧美经典视频| 美女视频黄a大片欧美| 亚洲国产mv| 欧美精品三级日韩久久| 亚洲一区欧美激情| 亚洲国产视频a| 欧美一区二区三区在线| 韩国在线视频一区| 欧美日本国产一区| 久久久中精品2020中文| 夜夜嗨av一区二区三区中文字幕 | 久久久噜噜噜久久人人看| 亚洲日本无吗高清不卡| 久久精品人人爽| 性色av香蕉一区二区| 亚洲一品av免费观看| 久久激情久久| 亚洲宅男天堂在线观看无病毒| 亚洲成人在线观看视频| 国产精品嫩草99av在线| 国产精品主播| 亚洲国产精品黑人久久久 | 亚洲激情在线观看| 欧美777四色影视在线| 欧美在线播放高清精品| 亚洲欧美电影院| 亚洲欧美伊人| 久久国产日韩| 久久综合久久综合这里只有精品| 亚洲性人人天天夜夜摸| 在线一区观看| 亚洲欧洲另类| 亚洲一区二三| 久久国产综合精品| 久久一二三区| 亚洲成在人线av| 一二三四社区欧美黄| 欧美一区二区视频网站| 巨胸喷奶水www久久久免费动漫| 久久视频在线免费观看| 国产精品成人在线观看| 国产精品久久777777毛茸茸| 国产主播在线一区| 亚洲国产黄色| 亚洲欧美日韩国产综合精品二区| 性做久久久久久久久| 欧美成人午夜激情视频| 一区二区三区导航| 欧美激情第五页| 国产真实久久| 亚洲午夜精品一区二区三区他趣 | 国产精品视频免费在线观看| 一区二区三区四区五区视频 | 久久五月天婷婷| 99re亚洲国产精品| 久久精品一本久久99精品| 欧美日韩国产探花| 在线精品视频一区二区三四| 亚洲女人小视频在线观看| 亚洲第一视频| 久久亚洲电影| 亚洲电影免费| 欧美激情欧美狂野欧美精品| 欧美在线视频免费播放| 国产三级欧美三级| 久久aⅴ国产欧美74aaa| 亚洲欧美日韩国产中文在线| 欧美午夜电影网| 在线精品视频免费观看| 欧美sm极限捆绑bd| 欧美精品1区| 亚洲在线黄色| 亚洲狼人精品一区二区三区| 亚洲女同性videos| 午夜视频精品| 亚洲精品综合精品自拍| 欧美国产一区二区在线观看| 欧美va天堂在线| 亚洲欧美国产另类| 久久久久久穴| 中文一区二区| 久久久999成人| 亚洲网站视频| 久久视频一区| 亚洲欧美在线x视频| 久久久之久亚州精品露出| 日韩一级黄色av| 久久爱另类一区二区小说| 日韩天堂在线视频| 久久天天综合| 久久动漫亚洲| 欧美性猛交视频| 亚洲欧洲在线播放| 国产综合色在线视频区| 这里只有精品电影| 亚洲综合日韩在线| 亚洲专区一二三| 欧美精品一区三区在线观看| 久久人人爽人人爽| 国产一区91| 欧美一区二区视频在线观看2020 | 欧美高清不卡| 亚洲二区视频在线|