瀏覽量:11次
1. 函數(shù)說明
pipe(建立管道):
1) 頭文件 #include
2) 定義函數(shù): int pipe(int filedes[2]);
3) 函數(shù)說明: pipe()會建立管道,并將文件描述詞由參數(shù)filedes數(shù)組返回。
filedes[0]為管道里的讀取端
filedes[1]則為管道的寫入端。
4) 返回值: 若成功則返回零,否則返回-1,錯誤原因存于errno中。
錯誤代碼:
EMFILE 進(jìn)程已用完文件描述詞最大量
ENFILE 系統(tǒng)已無文件描述詞可用。
EFAULT 參數(shù) filedes 數(shù)組地址不合法。
示例:
root@wl-MS-7673:/home/wl/桌面/c++# cat -n pipe_test.cpp
1
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 /*
10 * 程序入口
11 * */
12 int main()
13 {
14 int pipe_fd[2];
15 pid_t pid;
16 char buf_r[100];
17 char* p_wbuf;
18 int r_num;
19
20 memset(buf_r,0,sizeof(buf_r));
21
22 /*創(chuàng)建管道*/
23 if(pipe(pipe_fd)<0)
24 {
25 printf("pipe create errorn");
26 return -1;
27 }
28
29 /*創(chuàng)建子進(jìn)程*/
30 if((pid=fork())==0) //子進(jìn)程執(zhí)行序列
31 {
32 printf("n");
33 close(pipe_fd[1]);//子進(jìn)程先關(guān)閉了管道的寫端
34 sleep(2); /*讓父進(jìn)程先運(yùn)行,這樣父進(jìn)程先寫子進(jìn)程才有內(nèi)容讀*/
35 if((r_num=read(pipe_fd[0],buf_r,100))>0)
36 {
37 printf("%d numbers read from the pipe is %sn",r_num,buf_r);
38 }
39 close(pipe_fd[0]);
40 exit(0);
41 }
42 else if(pid>0) //父進(jìn)程執(zhí)行序列
43 {
44 close(pipe_fd[0]); //父進(jìn)程先關(guān)閉了管道的讀端
45 if(write(pipe_fd[1],"Hello",5)!=-1)
46 printf("parent write1 Hello!n");
47 if(write(pipe_fd[1]," Pipe",5)!=-1)
48 printf("parent write2 Pipe!n");
49 close(pipe_fd[1]);
50 wait(NULL); /*等待子進(jìn)程結(jié)束*/
51 exit(0);
52 }
53 return 0;
54 }
55
56
root@wl-MS-7673:/home/wl/桌面/c++# g++ pipe_test.cpp -o pipe_test
root@wl-MS-7673:/home/wl/桌面/c++# ./pipe_test
parent write1 Hello!
parent write2 Pipe!
10 numbers read from the pipe is Hello Pipe
root@wl-MS-7673:/home/wl/桌面/c++#
無名管道的創(chuàng)建是在fork創(chuàng)建前,通過pipe()創(chuàng)建管道,然后通過fork創(chuàng)建子進(jìn)程,之后,子進(jìn)程會拷貝父進(jìn)程的代碼段/數(shù)據(jù)段及堆棧段,因此,創(chuàng)建的管道會被復(fù)制一份,子進(jìn)程一份,父進(jìn)程一份,為了使管道正常通訊,必須處理已有管道。
上一篇: 制作linux系統(tǒng)的grub啟動光盤,grub命令行啟動系統(tǒng)
下一篇: win7系統(tǒng)利用修復(fù)工具解決電腦開機(jī)故障的方法,win7 系統(tǒng)修復(fù)工具
[聲明]本網(wǎng)轉(zhuǎn)載網(wǎng)絡(luò)媒體稿件是為了傳播更多的信息,此類稿件不代表本網(wǎng)觀點(diǎn),本網(wǎng)不承擔(dān)此類稿件侵權(quán)行為的連帶責(zé)任。故此,如果您發(fā)現(xiàn)本網(wǎng)站的內(nèi)容侵犯了您的版權(quán),請您的相關(guān)內(nèi)容發(fā)至此郵箱【779898168@qq.com】,我們在確認(rèn)后,會立即刪除,保證您的版權(quán)。
官網(wǎng)優(yōu)化
整站優(yōu)化
渠道代理
400-655-5776