linux 匿名管道實(shí)例詳解
linux中進(jìn)程的一種通信方式——匿名管道
pipe函數(shù)建立管道
調(diào)用pipe函數(shù)時(shí)在內(nèi)核中開(kāi)辟一塊緩沖區(qū)(稱為管道)用于通信,它有一個(gè)讀端一個(gè)寫(xiě)端,然后通過(guò)_pipe參數(shù)傳出給用戶程序兩個(gè)文件描述符,_pipe[0]指向管道的讀端,_pipe[1]指向管道的寫(xiě)端。所以管道在用戶程序看起來(lái)就像一個(gè)打開(kāi)的文件,通過(guò)read(_pipe[0]);或者write(_pipe[1]);向這個(gè)文件讀寫(xiě)數(shù)據(jù)其實(shí)是在讀寫(xiě)內(nèi)核緩沖區(qū)。pipe函數(shù)調(diào)用成功返回0,調(diào)用失敗返回-1。
1父進(jìn)程調(diào)用pipe開(kāi)辟管道,得到兩個(gè)文件描述符指向管道的兩端。
2. 父進(jìn)程調(diào)用fork創(chuàng)建⼦進(jìn)程,那么子進(jìn)程也有兩個(gè)文件描述符指向同一管道。
3. 父進(jìn)程關(guān)閉管道讀端,子進(jìn)程關(guān)閉管道寫(xiě)端。父進(jìn)程可以往管道里寫(xiě),子進(jìn)程可以從管道⾥讀,管道是用環(huán)形隊(duì)列實(shí)現(xiàn)的,數(shù)據(jù)從寫(xiě)端流入從讀端流出,這樣就實(shí)現(xiàn)了進(jìn)程間通信
匿名管道間的通信是單向的,并且是、只能是具有血緣關(guān)系的進(jìn)程間通信
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
int main()
{
int _pipe[2];
int ret = pipe(_pipe);
if (ret < 0)
{
perror("pipe");
return 1;
}
pid_t id = fork ();
if (id<0)
{
perror("fork");
return 2;
}
else if (id == 0)
{
// child
int count =5;
close (_pipe[0]);
char* msg = "hello bit";
while (count --)
{
write(_pipe[1],msg,strlen(msg));
sleep(1);
}
close (_pipe[1]);
exit(123);
}
else
{
// Father
close(_pipe[1]);
char buf[128];
while(1)
{
int count =5;
ssize_t s = read ( _pipe[0],buf,sizeof(buf)-1);
if (s<0)
{
perror("read");
}
else if(s==0)
{
printf("write is close\n");
return 2;
}
else
{
buf[s] ='\0';
printf ("child >> father: %s\n",buf);
}
count --;
if (count == 0)
{
close (_pipe[0]);
break;
}
}
int status = 0;
pid_t _wait = waitpid (id, &status,0);
if (_wait > 0)
{
printf("exit code is %d, signal is %d\n",
WIFEXITED(status), status & 0xff);
}
}
return 0;
}
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
上一篇:面試題快慢鏈表和快慢指針
欄 目:C語(yǔ)言
下一篇:C程序中唯一序列號(hào)的生成實(shí)例詳解
本文標(biāo)題:linux 匿名管道實(shí)例詳解
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/1439.html
您可能感興趣的文章
- 01-10深入解析Linux下\r\n的問(wèn)題
- 01-10Linux線程管理必備:解析互斥量與條件變量的詳解
- 01-10Linux C 獲取進(jìn)程退出值的實(shí)現(xiàn)代碼
- 01-10解析Linux下的時(shí)間函數(shù):設(shè)置以及獲取時(shí)間的方法
- 01-10深入探討linux下進(jìn)程的最大線程數(shù)、進(jìn)程最大數(shù)、進(jìn)程打開(kāi)的文
- 01-10基于linux下獲取時(shí)間函數(shù)的詳解
- 01-10linux c 查找使用庫(kù)的cflags與libs的方法詳解
- 01-10深入探討Linux靜態(tài)庫(kù)與動(dòng)態(tài)庫(kù)的詳解(一看就懂)
- 01-10Linux下semop等待信號(hào)時(shí)出現(xiàn)Interrupted System Call錯(cuò)誤(EINTR)解決方法
- 01-10linux c 獲取本機(jī)公網(wǎng)IP的實(shí)現(xiàn)方法


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫(xiě)分段 用c語(yǔ)言表示分段
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)
- 04-02c語(yǔ)言編寫(xiě)函數(shù)冒泡排序 c語(yǔ)言冒泡排
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10delphi制作wav文件的方法
- 01-10C#中split用法實(shí)例總結(jié)
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-11Mac OSX 打開(kāi)原生自帶讀寫(xiě)NTFS功能(圖文
- 04-02jquery與jsp,用jquery
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?


