管道
管道
linux系統(tǒng)中,管道常用于進程間通信。常見的shell命令如ls | grep name中的|符號就是默認的管道,首先ls程序會將輸出通過管道傳給grep程序的輸入。
管道的意義
兩個fd作為A進程的數(shù)據(jù)對象,進程clone()或者fork()出B進程時,進程會復制初始進程的數(shù)據(jù),從而B進程就可以訪問兩個fd。從而A和B之間就建立起了一種通信機制。
管道的原理
管道可以視為一種緩沖區(qū),有著兩個端點:寫端和讀端。數(shù)據(jù)只能從寫端進入,從讀端流出。創(chuàng)建管道時,系統(tǒng)會分配一個緩沖區(qū),并為讀寫兩端分配fd。
管道分類
匿名管道
匿名管道主要用于父子進程間進行通信。匿名管道通過pipe()創(chuàng)建,創(chuàng)建完成會生成一個pipefd數(shù)組,pipefd[0]代表讀端,pipe[1]fd代表寫端。
命名管道
命名管道主要用于非父子進程間進行通信。命名管道又稱為FIFO(First in,F(xiàn)irst out),命名管道可以通過mkfifo命令或者mkfifo()系統(tǒng)調(diào)用進行創(chuàng)建。

浙公網(wǎng)安備 33010602011771號