unix环境高级编程-进程间通信
之前說明了進程控制原語,但是這些進程之間交換信息的唯一途徑就是傳送打開的文件,可以由fork或exec傳送,也可以通過文件系統來傳送,接下來說明進程之間相互通信的其他技術-進程間通信(IPC)
管道:
管道是unix中IPC最古老的形式,管道有以下幾點局限:
1.歷史上是半雙工的
2.管道只能在具有共同父輩的兩個進程間使用。
盡管有這些局限性,半雙工管道仍是最常見的IPC形式,每當在管道中鍵入一個命令序列,讓shell執行時,shell都會為每一條命令單獨創建一個進程,然后用管道將前一條命令進程的標準輸出與后條命令的標準輸入相連接。
管道是通過調用pipe函數創建的。
#include <unistd.h>
int pipe(int fd[2]);
經由參數fd返回兩個文件描述符:fd[0]為讀而打開,fd[1]為寫而打開,fd[1]的輸出是fd[0]的輸入。
下圖給出了兩周過描述半雙工管道的方法。左圖顯示管道的兩端在一個進程相互連接,右圖則強調數據需要通過內核在管道中流動。
單個進程中的管道幾乎沒有任何作用,通常進程會先調用pipe,接著調用fork,從而創建父進程到子進程的IPC通道。下圖顯示了這種情況
對于從父進程到子進程的管道,父進程關閉管道的讀端(fd[0]),子進程關閉寫端(fd[1])。對于子進程到父進程的管道,父進程關閉fd[1],子進程關閉fd[0]。
當管道的一端被關閉后,下列兩條規則起作用:
1.當讀(read)一個寫端被關閉的管道時,在所有數據都被讀取后,read返回0,表示文件結束。
2.如果寫(write)一個讀端已經被關閉的管道,則產生信號SIGPIPE。
轉載于:https://www.cnblogs.com/sichenzhao/p/9320354.html
總結
以上是生活随笔為你收集整理的unix环境高级编程-进程间通信的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux关闭在线登录用户
- 下一篇: 云笈七签