日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

unix环境高级编程-进程间通信

發(fā)布時(shí)間:2025/3/21 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 unix环境高级编程-进程间通信 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

之前說(shuō)明了進(jìn)程控制原語(yǔ),但是這些進(jìn)程之間交換信息的唯一途徑就是傳送打開的文件,可以由fork或exec傳送,也可以通過(guò)文件系統(tǒng)來(lái)傳送,接下來(lái)說(shuō)明進(jìn)程之間相互通信的其他技術(shù)-進(jìn)程間通信(IPC)


管道:

管道是unix中IPC最古老的形式,管道有以下幾點(diǎn)局限:

1.歷史上是半雙工的

2.管道只能在具有共同父輩的兩個(gè)進(jìn)程間使用。

盡管有這些局限性,半雙工管道仍是最常見的IPC形式,每當(dāng)在管道中鍵入一個(gè)命令序列,讓shell執(zhí)行時(shí),shell都會(huì)為每一條命令單獨(dú)創(chuàng)建一個(gè)進(jìn)程,然后用管道將前一條命令進(jìn)程的標(biāo)準(zhǔn)輸出與后條命令的標(biāo)準(zhǔn)輸入相連接。

管道是通過(guò)調(diào)用pipe函數(shù)創(chuàng)建的。

#include <unistd.h>

int pipe(int fd[2]);

經(jīng)由參數(shù)fd返回兩個(gè)文件描述符:fd[0]為讀而打開,fd[1]為寫而打開,fd[1]的輸出是fd[0]的輸入。

下圖給出了兩周過(guò)描述半雙工管道的方法。左圖顯示管道的兩端在一個(gè)進(jìn)程相互連接,右圖則強(qiáng)調(diào)數(shù)據(jù)需要通過(guò)內(nèi)核在管道中流動(dòng)。

單個(gè)進(jìn)程中的管道幾乎沒有任何作用,通常進(jìn)程會(huì)先調(diào)用pipe,接著調(diào)用fork,從而創(chuàng)建父進(jìn)程到子進(jìn)程的IPC通道。下圖顯示了這種情況

對(duì)于從父進(jìn)程到子進(jìn)程的管道,父進(jìn)程關(guān)閉管道的讀端(fd[0]),子進(jìn)程關(guān)閉寫端(fd[1])。對(duì)于子進(jìn)程到父進(jìn)程的管道,父進(jìn)程關(guān)閉fd[1],子進(jìn)程關(guān)閉fd[0]。

當(dāng)管道的一端被關(guān)閉后,下列兩條規(guī)則起作用:

1.當(dāng)讀(read)一個(gè)寫端被關(guān)閉的管道時(shí),在所有數(shù)據(jù)都被讀取后,read返回0,表示文件結(jié)束。

2.如果寫(write)一個(gè)讀端已經(jīng)被關(guān)閉的管道,則產(chǎn)生信號(hào)SIGPIPE。




轉(zhuǎn)載于:https://www.cnblogs.com/sichenzhao/p/9320354.html

總結(jié)

以上是生活随笔為你收集整理的unix环境高级编程-进程间通信的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。