锘??xml version="1.0" encoding="utf-8" standalone="yes"?> gprof鏄疓NU profiler宸ュ叿銆傚彲浠ユ樉紺虹▼搴忚繍琛岀殑“flat profile”錛屽寘鎷瘡涓嚱鏁扮殑璋冪敤嬈℃暟錛屾瘡涓嚱鏁版秷鑰楃殑澶勭悊鍣ㄦ椂闂淬備篃鍙互鏄劇ず“璋冪敤鍥?#8221;錛屽寘鎷嚱鏁扮殑璋冪敤鍏崇郴錛屾瘡涓嚱鏁拌皟鐢ㄨ姳璐逛簡澶氬皯鏃墮棿銆傝繕鍙互鏄劇ず“娉ㄩ噴鐨勬簮浠g爜”錛屾槸紼嬪簭婧愪唬鐮佺殑涓涓鏈紝鏍囪鏈夌▼搴忎腑姣忚浠g爜鐨勬墽琛屾鏁般?/p>
1錛?浣跨敤 -pg 緙栬瘧鍜岄摼鎺ヤ綘鐨勫簲鐢ㄧ▼搴忋?/p>
2錛?鎵ц浣犵殑搴旂敤紼嬪簭浣夸箣鐢熸垚渚沢prof 鍒嗘瀽鐨勬暟鎹?
3錛?浣跨敤gprof 紼嬪簭鍒嗘瀽浣犵殑搴旂敤紼嬪簭鐢熸垚鐨勬暟鎹?
$gprof -b a.out gmon.out Each sample counts as 0.01 seconds. % cumulative self self total Call graph
granularity: each sample hit covers 2 byte(s) no time propagated
index % time self children called name Index by function name
[1] function
gprof [鍙墽琛屾枃浠禲 [gmon.out鏂囦歡] [鍏跺畠鍙傛暟]
鏂規嫭鍙蜂腑鐨勫唴瀹瑰彲浠ョ渷鐣ャ傚鏋滅渷鐣ヤ簡“鍙墽琛屾枃浠?#8221;錛実prof浼氬湪褰撳墠鐩綍涓嬫悳绱.out鏂囦歡浣滀負鍙墽琛屾枃浠訛紝鑰屽鏋滅渷鐣ヤ簡gmon.out鏂囦歡錛実prof涔熶細鍦ㄥ綋鍓嶇洰褰曚笅瀵繪壘gmon.out銆傚叾瀹冨弬鏁板彲浠ユ帶鍒秅prof杈撳嚭鍐呭鐨勬牸寮忕瓑淇℃伅銆傛渶甯哥敤鐨勫弬鏁板涓嬶細
l -b 涓嶅啀杈撳嚭緇熻鍥捐〃涓瘡涓瓧孌電殑璇︾粏鎻忚堪銆?
l -p 鍙緭鍑哄嚱鏁扮殑璋冪敤鍥撅紙Call graph鐨勯偅閮ㄥ垎淇℃伅錛夈?
l -q 鍙緭鍑哄嚱鏁扮殑鏃墮棿娑堣楀垪琛ㄣ?
l -e Name 涓嶅啀杈撳嚭鍑芥暟Name 鍙婂叾瀛愬嚱鏁扮殑璋冪敤鍥撅紙闄ら潪瀹冧滑鏈夋湭琚檺鍒剁殑鍏跺畠鐖跺嚱鏁幫級銆傚彲浠ョ粰瀹氬涓?-e 鏍囧織銆備竴涓?-e 鏍囧織鍙兘鎸囧畾涓涓嚱鏁般?
l -E Name 涓嶅啀杈撳嚭鍑芥暟Name 鍙婂叾瀛愬嚱鏁扮殑璋冪敤鍥撅紝姝ゆ爣蹇楃被浼間簬 -e 鏍囧織錛屼絾瀹冨湪鎬繪椂闂村拰鐧懼垎姣旀椂闂寸殑璁$畻涓帓闄や簡鐢卞嚱鏁癗ame 鍙婂叾瀛愬嚱鏁版墍鐢ㄧ殑鏃墮棿銆?
l -f Name 杈撳嚭鍑芥暟Name 鍙婂叾瀛愬嚱鏁扮殑璋冪敤鍥俱傚彲浠ユ寚瀹氬涓?-f 鏍囧織銆備竴涓?-f 鏍囧織鍙兘鎸囧畾涓涓嚱鏁般?
l -F Name 杈撳嚭鍑芥暟Name 鍙婂叾瀛愬嚱鏁扮殑璋冪敤鍥撅紝瀹冪被浼間簬 -f 鏍囧織錛屼絾瀹冨湪鎬繪椂闂村拰鐧懼垎姣旀椂闂磋綆椾腑浠呬嬌鐢ㄦ墍鎵撳嵃鐨勪緥紼嬬殑鏃墮棿銆傚彲浠ユ寚瀹氬涓?-F 鏍囧織銆備竴涓?-F 鏍囧織鍙兘鎸囧畾涓涓嚱鏁般?F 鏍囧織瑕嗙洊 -E 鏍囧織銆?
l -z 鏄劇ず浣跨敤嬈℃暟涓洪浂鐨勪緥紼嬶紙鎸夌収璋冪敤璁℃暟鍜岀瘡縐椂闂磋綆楋級銆?
涓嶈繃,gprof涓嶈兘鏄劇ず瀵硅薄涔嬮棿鐨勭戶鎵垮叧緋?榪欎篃鏄畠鐨勫急鐐? 杞澆鏉ユ簮錛?a >http://blog.csdn.net/dragonbooker/article/details/6173321 銆銆鎵璋撶殑澶х妯″紡錛屾槸鎸囨暟鎹殑浣庝綅錛堝氨鏄潈鍊艱緝灝忕殑鍚庨潰閭e嚑浣嶏級淇濆瓨鍦ㄥ唴瀛樼殑楂樺湴鍧涓紝鑰屾暟鎹殑楂樹綅錛屼繚瀛樺湪鍐呭瓨鐨勪綆鍦板潃涓紝榪欐牱鐨勫瓨鍌ㄦā寮忔湁鐐瑰効綾諱技浜庢妸鏁版嵁褰撲綔瀛楃涓查『搴忓鐞嗭細鍦板潃鐢卞皬鍚戝ぇ澧炲姞錛岃屾暟鎹粠楂樹綅寰浣庝綅鏀撅紱 灝忕妯″紡 銆銆鎵璋撶殑灝忕妯″紡錛屾槸鎸囨暟鎹殑浣庝綅淇濆瓨鍦ㄥ唴瀛樼殑浣庡湴鍧涓紝鑰屾暟 鎹殑楂樹綅淇濆瓨鍦ㄥ唴瀛樼殑楂樺湴鍧涓紝榪欑瀛樺偍妯″紡灝嗗湴鍧鐨勯珮浣庡拰鏁版嵁浣嶆潈鏈夋晥鍦扮粨鍚堣搗鏉ワ紝楂樺湴鍧閮ㄥ垎鏉冨奸珮錛屼綆鍦板潃閮ㄥ垎鏉冨間綆錛屽拰鎴戜滑鐨勯昏緫鏂規硶涓鑷淬?/span> 涓轟粈涔堟湁澶у皬绔ā寮忎箣鍒?/span> 涓轟粈涔堜細鏈夊ぇ灝忕妯″紡涔嬪垎鍛紵榪欐槸鍥犱負鍦ㄨ綆楁満緋葷粺涓紝鎴戜滑鏄互瀛楄妭涓哄崟浣嶇殑錛屾瘡涓湴鍧鍗曞厓閮藉搴旂潃涓涓瓧鑺傦紝涓涓瓧鑺備負 8bit銆備絾鏄湪C璇█涓櫎浜?/span>8bit鐨?/span>char涔嬪錛岃繕鏈?/span>16bit鐨?/span>short鍨嬶紝32bit鐨?/span>long鍨嬶紙瑕佺湅鍏蜂綋鐨勭紪璇戝櫒錛夛紝鍙﹀錛屽浜庝綅鏁板ぇ浜?/span> 8浣嶇殑澶勭悊鍣紝渚嬪16浣嶆垨鑰?/span>32浣嶇殑澶勭悊鍣紝鐢變簬瀵勫瓨鍣ㄥ搴﹀ぇ浜庝竴涓瓧鑺傦紝閭d箞蹇呯劧瀛樺湪鐫涓涓浣曞皢澶氫釜瀛楄妭瀹夋帓鐨勯棶棰樸傚洜姝ゅ氨瀵艱嚧浜嗗ぇ绔瓨鍌ㄦā寮忓拰灝忕瀛樺偍妯″紡銆備緥濡備竴涓?/span>16bit鐨?/span>short鍨?/span>x錛屽湪鍐呭瓨涓殑鍦板潃涓?/span>0x0010錛?/span>x鐨勫間負0x1122錛岄偅涔?/span>0x11涓洪珮瀛楄妭錛?/span>0x22涓轟綆瀛楄妭銆傚浜?/span> 澶х妯″紡錛屽氨灝?/span>0x11鏀懼湪浣庡湴鍧涓紝鍗?/span>0x0010涓紝0x22鏀懼湪楂樺湴鍧涓紝鍗?/span>0x0011涓傚皬绔ā寮忥紝鍒氬ソ鐩稿弽銆傛垜浠父鐢ㄧ殑X86緇撴瀯鏄皬绔ā寮忥紝鑰?/span>KEIL C51鍒欎負澶х妯″紡銆傚緢澶氱殑ARM錛?/span>DSP閮戒負灝忕妯″紡銆傛湁浜?/span>ARM澶勭悊鍣ㄨ繕鍙互鐢辯‖浠舵潵閫夋嫨鏄ぇ绔ā寮忚繕鏄皬绔ā寮忋?/span> 澶у閮界煡閬撳瓧絎?#8216;A’鐨?/span>ASCII鐮佸間負65錛堝崄榪涘埗錛変篃灝辨槸0x41錛岄偅涔堣繖涓煎湪涓嶅悓澶у皬绔ā寮忕殑緋葷粺涓瓨鏀劇殑鏂瑰紡鍒嗗埆涓猴細 澶х妯″紡錛?/span>00 00 00 41 -----楂樹綆妯″紡 灝忕妯″紡錛?/span>41 00 00 00 -----浣庝綆妯″紡 鍙互閫氳繃澹版槑涓涓仈鍚堬紙union錛夊垽鏂ぇ灝忕妯″紡錛?/span> /** * 鏂規硶涓 寰楀埌褰撳墠緋葷粺鐨勫ぇ灝忕灞炴?/span>, 姝ゆ柟娉曡淇濊瘉鍦?/span>32浣嶆満嫻嬭瘯 */ static union { char c[4]; unsigned long l; } endian_test = { { 'l', '?', '?', 'b' } }; 銆銆 #define ENDIANNESS ((char)endian_test.l) /** * 鏂規硶浜?/span>: 寰楀埌褰撳墠緋葷粺鐨勫ぇ灝忕灞炴?/span> */ static union { short n; char c[sizeof(short)]; }un; int getEndian() { un.n = 0x0102; if ((un.c[0] == 1 && un.c[1] == 2)) { printf("big endian/n"); } else if ((un.c[0] == 2 && un.c[1] == 1)) { printf("little endian/n"); } else printf("error!/n"); return 0; } /** * 鏂規硶涓?/span>: 寰楀埌褰撳墠緋葷粺鐨勫ぇ灝忕灞炴?/span> */ int getEndian() { int c = 1; // big-endian: 00 00 00 01 little-endian: 01 00 00 00 // int c = 0x02000001; // big-endian: 02 00 00 01 little-endian: 01 00 00 02 if ((*(char *)&c) == 1) // 鍙?/span>c鍙橀噺鎵鍦ㄥ湴鍧涓婄殑涓涓瓧鑺傘?/span> { printf("little endian/n"); } else printf("big endian"); return 0; } 鍒涘緩FIFO綆¢亾 FIFO璇誨啓鎿嶄綔gprof浠嬬粛
涓篻prof緙栬瘧紼嬪簭
鍦ㄧ紪璇戞垨閾炬帴婧愮▼搴忕殑鏃跺欏湪緙栬瘧鍣ㄧ殑鍛戒護琛屽弬鏁頒腑鍔犲叆“-pg”閫夐」錛岀紪璇戞椂緙栬瘧鍣ㄤ細鑷姩鍦ㄧ洰鏍囦唬鐮佷腑鎻掑叆鐢ㄤ簬鎬ц兘嫻嬭瘯鐨勪唬鐮佺墖鏂紝榪欎簺浠g爜鍦ㄧ▼搴忓湪榪愯鏃墮噰闆嗗茍璁板綍鍑芥暟鐨勮皟鐢ㄥ叧緋誨拰璋冪敤嬈℃暟錛屼互鍙婇噰闆嗗茍璁板綍鍑芥暟鑷韓鎵ц鏃墮棿鍜屽瓙鍑芥暟鐨勮皟鐢ㄦ椂闂達紝紼嬪簭榪愯緇撴潫鍚庯紝浼氬湪紼嬪簭閫鍑虹殑璺緞涓嬬敓鎴愪竴涓猤mon.out鏂囦歡銆傝繖涓枃浠跺氨鏄褰曞茍淇濆瓨涓嬫潵鐨勭洃鎺ф暟鎹傚彲浠ラ氳繃鍛戒護琛屾柟寮忕殑gprof鎴栧浘褰㈠寲鐨凨prof鏉ヨВ璇昏繖浜涙暟鎹茍瀵圭▼搴忕殑鎬ц兘榪涜鍒嗘瀽銆傚彟澶栵紝濡傛灉鎯蟲煡鐪嬪簱鍑芥暟鐨刾rofiling錛岄渶瑕佸湪緙栬瘧鏄啀鍔犲叆“-lc_p”緙栬瘧鍙傛暟浠f浛“-lc”緙栬瘧鍙傛暟錛岃繖鏍風▼搴忎細閾炬帴libc_p.a搴擄紝鎵嶅彲浠ヤ駭鐢熷簱鍑芥暟鐨刾rofiling淇℃伅銆傚鏋滄兂鎵ц涓琛屼竴琛岀殑profiling錛岃繕闇瑕佸姞鍏?#8220;-g”緙栬瘧鍙傛暟銆?br />渚嬪濡備笅鍛戒護琛岋細gcc -Wall -g -pg -lc_p example.c -o exampleGprof鍩烘湰鐢ㄦ硶錛?/em>
Flat profile:
no time accumulated
time seconds seconds calls Ts/call Ts/call name
0.00 0.00 0.00 1 0.00 0.00 function
0.00 0.00 1/1 main [8]
[1] 0.0 0.00 0.00 1 function [1]
-----------------------------------------------
gprof浜х敓鐨勪俊鎭?/h1>
% the percentage of the total running time of the
time program used by this function.
鍑芥暟浣跨敤鏃墮棿鍗犳墍鏈夋椂闂寸殑鐧懼垎姣斻?br />cumulative a running sum of the number of seconds accounted
seconds for by this function and those listed above it.
鍑芥暟鍜屼笂鍒楀嚱鏁扮瘡璁℃墽琛岀殑鏃墮棿銆?br />self the number of seconds accounted for by this
seconds function alone. This is the major sort for this
listing.
鍑芥暟鏈韓鎵鎵ц鐨勬椂闂淬?br />calls the number of times this function was invoked, if
this function is profiled, else blank.
鍑芥暟琚皟鐢ㄧ殑嬈℃暟
self the average number of milliseconds spent in this
ms/call function per call, if this function is profiled,
else blank.
姣忎竴嬈¤皟鐢ㄨ姳璐瑰湪鍑芥暟鐨勬椂闂磎icroseconds銆?br />total the average number of milliseconds spent in this
ms/call function and its descendents per call, if this
function is profiled, else blank.
姣忎竴嬈¤皟鐢紝鑺辮垂鍦ㄥ嚱鏁板強鍏惰鐢熷嚱鏁扮殑騫沖潎鏃墮棿microseconds銆?br />name the name of the function. This is the minor sort
for this listing. The index shows the location of
the function in the gprof listing. If the index is
in parenthesis it shows where it would appear in
the gprof listing if it were to be printed.
鍑芥暟鍚?/p>
鍛戒護鏍煎紡
]]>
澶х妯″紡浜屻佷婦渚嬭鏄?/span>
涓夈佷嬌鐢ㄤ唬鐮佸垽鏂ぇ灝忕妯″紡
]]>
$mkfifo –m 600 fifocat
#include <sys/stat.h>
#include <sys/types.h>
int mkfifo( const char *filename, mode_t mode );
鍙傛暟璇存槑錛歮ode鎸囧畾FIFO鐨勮鍐欐潈闄愶紝鏂板垱寤篎IFO鐨勭敤鎴稩D鍜岀粍ID瑙勫垯銆備笌open鍑芥暟鐩稿悓銆?br> 鍙傛暟mode 鍒欐湁涓嬪垪鏁扮緇勫悎錛屽彧鏈夊湪寤虹珛鏂版枃浠舵椂鎵嶄細鐢熸晥錛屾澶栫湡姝e緩鏂囦歡鏃剁殑鏉冮檺浼氬彈鍒皍mask鍊兼墍褰卞搷錛屽洜姝よ鏂囦歡鏉冮檺搴旇涓猴紙mode-umaks錛夈?br>S_IRWXU00700 鏉冮檺錛屼唬琛ㄨ鏂囦歡鎵鏈夎呭叿鏈夊彲璇匯佸彲鍐欏強鍙墽琛岀殑鏉冮檺銆?br>S_IRUSR 鎴朣_IREAD錛?0400鏉冮檺錛屼唬琛ㄨ鏂囦歡鎵鏈夎呭叿鏈夊彲璇誨彇鐨勬潈闄愩?br>S_IWUSR 鎴朣_IWRITE錛?0200 鏉冮檺錛屼唬琛ㄨ鏂囦歡鎵鏈夎呭叿鏈夊彲鍐欏叆鐨勬潈闄愩?br>S_IXUSR 鎴朣_IEXEC錛?0100 鏉冮檺錛屼唬琛ㄨ鏂囦歡鎵鏈夎呭叿鏈夊彲鎵ц鐨勬潈闄愩?br>S_IRWXG 00070鏉冮檺錛屼唬琛ㄨ鏂囦歡鐢ㄦ埛緇勫叿鏈夊彲璇匯佸彲鍐欏強鍙墽琛岀殑鏉冮檺銆?br>S_IRGRP 00040 鏉冮檺錛屼唬琛ㄨ鏂囦歡鐢ㄦ埛緇勫叿鏈夊彲璇葷殑鏉冮檺銆?br>S_IWGRP 00020鏉冮檺錛屼唬琛ㄨ鏂囦歡鐢ㄦ埛緇勫叿鏈夊彲鍐欏叆鐨勬潈闄愩?br>S_IXGRP 00010 鏉冮檺錛屼唬琛ㄨ鏂囦歡鐢ㄦ埛緇勫叿鏈夊彲鎵ц鐨勬潈闄愩?br>S_IRWXO 00007鏉冮檺錛屼唬琛ㄥ叾浠栫敤鎴峰叿鏈夊彲璇匯佸彲鍐欏強鍙墽琛岀殑鏉冮檺銆?br>S_IROTH 00004 鏉冮檺錛屼唬琛ㄥ叾浠栫敤鎴峰叿鏈夊彲璇葷殑鏉冮檺
S_IWOTH 00002鏉冮檺錛屼唬琛ㄥ叾浠栫敤鎴峰叿鏈夊彲鍐欏叆鐨勬潈闄愩?br>S_IXOTH 00001 鏉冮檺錛屼唬琛ㄥ叾浠栫敤鎴峰叿鏈夊彲鎵ц鐨勬潈闄愩?br> %娉ㄦ剰錛氬綋瑕佸垱寤轟竴涓凡緇忓瓨鍦ㄧ殑FIFO鏃訛紝紼嬪簭浼氫駭鐢熶竴涓狤EXIST鐨勫紓甯?/p>
鑸殑I/O錛坥pen close read write unlink錛夊嚱鏁伴兘鍙互鐢ㄤ簬FIFO鏂囦歡錛岄渶瑕佹敞鎰忕殑鏄紝鍦ㄤ嬌鐢╫pen鍑芥暟鎵撳紑涓涓狥IFO鏂囦歡鏃訛紝open鍑芥暟鍙傛暟flag鏍囧織浣嶇殑O_NONBLOCK鏍囧織錛屽畠鍏崇郴鍒板嚱鏁扮殑榪斿洖鐘舵併傝緇嗚鏄庡琛?4-2鎵紺恒?br>琛?4-2 open鍑芥暟鐨刦lag(O_NONBLOCK)璇︾粏璇存槑
O_NONBLOCK鏍囧織
璇?緇?璇?鏄?br>緗綅
鍙open绔嬪嵆榪斿洖銆傚綋鍙啓open鏃訛紝濡傛灉娌℃湁榪涚▼涓鴻鎵撳紑FIFO錛屽垯榪斿洖–1錛屽茍緗甧rrno鍊間負ENXIO
涓嶇疆浣?br>open瑙嗘儏鍐甸樆濉炪傚彧璇籵pen瑕侀樆濉炲埌鏈夎繘紼嬩負鍐欐墦寮FIFO錛屽彧鍐檕pen瑕侀樆濉炲埌鏈夎繘紼嬩負璇繪墦寮FIFO
FIFO鐨勫啓鎿嶄綔瑙勫垯綾諱技浜庡尶鍚嶇閬撶殑鍐欐搷浣滆鍒欙紝褰撴病鏈夎繘紼嬩負璇繪墦寮FIFO錛岃皟鐢╳rite鍑芥暟鏉ヨ繘琛屽啓鎿嶄綔浼氫駭鐢熶俊鍙稴IGPIPE錛屽垯淇″彿鍙互琚崟鎹夋垨鑰呭畬鍏ㄥ拷鐣ャ?br> %娉ㄦ剰錛氬綋FIFO鐨勬墍鏈夊啓榪涚▼閮藉凡緇忓叧闂紝鍒欎負FIFO鐨勮榪涚▼浜х敓涓涓枃浠剁粨鏉熺銆?/p>
FIFO鐨勭己鐐?br> 褰撶劧FIFO涔熸湁瀹冪殑灞闄愭э紝濡傚浘14-6鎵紺恒傚鎴風鍙互鍙戣姹傚埌鏈嶅姟鍣紝浣嗗墠鎻愭槸瑕佺煡閬撲竴涓叕鍏辯殑FIFO閫氶亾錛屽浜庡疄鐜版湇鍔″櫒鍥炰紶搴旂瓟鍒板鎴風鐨勯棶棰橈紝鍙互閫氳繃涓烘瘡涓涓鎴風鍒涘緩涓涓笓鐢ㄧ殑FIFO錛屾潵瀹炵幇鍥炰紶搴旂瓟銆備絾涔熸湁涓嶈凍錛屾湇鍔″櫒浼氬悓鏃跺簲絳旀垚鍗冧笂涓囦釜瀹㈡埛绔紝鍒涘緩濡傛澶氱殑FIFO鏄惁浼氫嬌緋葷粺璐熻澆榪囧ぇ錛岀浉搴旂殑濡備綍鍒ゆ柇瀹㈡埛绔槸鍚﹀洜鎰忓鑰屽穿婧冩垚涓洪毦棰橈紝鎴栬呭鎴風涓嶈鍙栧簲絳旂洿鎺ラ鍑猴紝鎵浠ユ湇鍔″櫒蹇呴』澶勭悊SIGPIPE淇″彿錛屽茍鍋氱浉搴斿鐞嗐?br>
]]>
欏懼悕鎬濅箟錛屽尶鍚嶅崐鍙屽伐綆¢亾娌℃湁鍚嶅瓧錛岃繖涓壒鎬у鑷翠簡瀹冨湪搴旂敤鏂歸潰鐨勫眬闄愭э細
1.鍙兘鍦ㄦ湁鍏鋒湁鍏叡紲栧厛鐨勮繘紼嬮棿閫氫俊錛屽嵆鎴栨槸鐖跺瓙鍏崇郴榪涚▼闂淬佹垨鏄湪鍏勫紵鍏崇郴榪涚▼闂撮氫俊銆?br> 2.鏁版嵁鍙兘鍦ㄤ竴涓柟鍚戜笂縐誨姩
綆¢亾鍒涘緩
灝界榪欐牱錛屽崐鍙屽伐綆¢亾榪樻槸Linux緋葷粺涓婃渶甯歌鐨勯氫俊鏂瑰紡銆侺inux緋葷粺鐢╬ipe鍑芥暟鍒涘緩涓涓崐鍙屽伐綆¢亾錛屾湡鍑芥暟鍘熷瀷涓猴細
include<unistd.h>
int pipe(int fd[2]);
鍙傛暟fd鏄竴涓暱搴︿負2鐨勬枃浠舵弿榪扮錛宖d[1]涓鴻緭鍏ユ枃浠舵弿榪扮錛宖d[1]涓鴻緭鍑烘枃浠舵弿榪扮錛涘嚱鏁拌繑鍥炵被鍨嬩負int錛?琛ㄧず鎴愬姛錛?1琛ㄧず澶辮觸銆傚綋鎴愬姛榪斿洖鏃訛紝鍒欒嚜鍔ㄧ淮鎶や竴涓粠fd[1]鍒癴d[0]鐨勫悓琛岀閬撱?br>綆¢亾鎿嶄綔
瀵圭閬撹繘琛岃鍐欙紝鍙互閫氳繃write鍜宺ead榪涜錛?br> write(fd[1], "create the pipe successfully !\n", 31 ); /*鍚戠閬撳啓鍏ョ鍐欏叆鏁版嵁*/
char str[256];
read(fd[0], str, sizeof(str) ); /*浠庣閬撹鍑虹璇誨嚭鏁版嵁*/
璇誨啓鏃訛紝闇瑕佹敞鎰忕殑闂錛?br> 1.褰撹緭鍑虹鍏抽棴鏃訛紝瀵硅緭鍏ョ鐨勫啓鎿嶄綔浼氫駭鐢熶俊鍙稴IGPIPE錛岃鏄庣閬撹绔凡緇忓叧闂紝騫朵笖write鎿嶄綔榪斿洖涓?#8211;1錛宔rrno鐨勫間負EPIPE錛屽浜嶴IGPIPE淇″彿鍙互榪涜鎹曟崏澶勭悊銆?br> 2.read榪斿洖0璇存槑綆¢亾涓病鏁版嵁錛屼絾涓嶈兘璇存槑杈撳叆绔槸鍚﹀叧闂?br>鎿嶄綔嫻佺▼
1.鍒涘緩綆¢亾
2.鍒╃敤fork鍒涘緩瀛愯繘紼?br> 3.鎺у埗綆¢亾嫻佸悜
4.浠巉d[1]鍚戠閬撳啓淇℃伅
5.閫氳繃fd[0]浠庣閬撴浮淇℃伅
鍒涘緩綆¢亾鐨勬爣鍑嗗簱鍑芥暟
#include <stdio.h>
FILE *popen( const char * command, const char *mode );
int pclose ( FILE *stream );
紺轟緥
寮曠敤銆奓inux C紼嬪簭璁捐澶у叏銆?涓殑渚嬪瓙
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/types.h>
#define BUFES PIPE_BUF /* PIPE_BUF綆¢亾榛樿涓嬈℃ц鍐欑殑鏁版嵁闀垮害*/
int main ( void ) {
int fd[2];
char buf[BUFSZ];
pid_t pid;
int len;
if ( (pipe(fd)) < 0 ){ /*鍒涘緩綆¢亾*/
perror ( "failed to pipe" );
exit( 1 );
}
if ( (pid = fork()) < 0 ){ /* 鍒涘緩涓涓瓙榪涚▼ */
perror ( "failed to fork " );
exit( 1 );
}
else if ( pid > 0 ){
close ( fd[0] ); /*鐖惰繘紼嬩腑鍏抽棴綆¢亾鐨勮鍑虹*/
write (fd[1], "hello my son!\n", 14 ); /*鐖惰繘紼嬪悜綆¢亾鍐欏叆鏁版嵁*/
exit ( 0);
}
else {
close ( fd[1] ); /*瀛愯繘紼嬪叧闂閬撶殑鍐欏叆绔?/
len = read (fd[0], buf, BUFS ); /*瀛愯繘紼嬩粠綆¢亾涓鍑烘暟鎹?/
if ( len < 0 ){
perror ( "process failed when read a pipe " );
exit( 1 );
}
else
write(STDOUT_FILENO, buf, len); /*杈撳嚭鍒版爣鍑嗚緭鍑?/
exit(0);
}
}