日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          新聞中心

          進(jìn)程間通信之:管道

          作者: 時(shí)間:2013-09-13 來源:網(wǎng)絡(luò) 收藏

          本文引用地址:http://yuyingmama.com.cn/article/257127.htm

          8.2

          8.2.1概述

          本書在第2章中介紹“ps”的命令時(shí)提到過,當(dāng)時(shí)指出了管道是中一種很重要的通信方式,它是把一個(gè)程序的輸出直接連接到另一個(gè)程序的輸入,這里仍以第2章中的“ps–ef|grepntp”為例,描述管道的通信過程,如圖8.2所示。

          圖8.2管道的通信過程

          管道是間通信的一種方式。這里所說的管道主要指無名管道,它具有如下特點(diǎn)。

          n 它只能用于具有親緣關(guān)系的之間的通信(也就是父子或者兄弟進(jìn)程之間)。

          n 它是一個(gè)半雙工的通信模式,具有固定的讀端和寫端。

          n 管道也可以看成是一種特殊的文件,對(duì)于它的讀寫也可以使用普通的read()和write()等函數(shù)。但是它不是普通的文件,并不屬于其他任何文件系統(tǒng),并且只存在于內(nèi)核的內(nèi)存空間中。

          8.2.2管道

          1.管道創(chuàng)建與關(guān)閉說明

          管道是基于文件描述符的通信方式,當(dāng)一個(gè)管道建立時(shí),它會(huì)創(chuàng)建兩個(gè)文件描述符fds[0]和fds[1],其中fds[0]固定用于讀管道,而fd[1]固定用于寫管道,如圖8.3所示,這樣就構(gòu)成了一個(gè)半雙工的通道。

          圖8.3中管道與文件描述符的關(guān)系

          管道關(guān)閉時(shí)只需將這兩個(gè)文件描述符關(guān)閉即可,可使用普通的close()函數(shù)逐個(gè)關(guān)閉各個(gè)文件描述符。

          注意

          當(dāng)一個(gè)管道共享多對(duì)文件描述符時(shí),若將其中的一對(duì)讀寫文件描述符都刪除,則該管道就失效。

          2.管道創(chuàng)建函數(shù)

          創(chuàng)建管道可以通過調(diào)用pipe()來實(shí)現(xiàn),表8.1列出了pipe()函數(shù)的語法要點(diǎn)。

          表8.1 pipe()函數(shù)語法要點(diǎn)

          所需頭文件

          #includeunistd.h>

          函數(shù)原型

          intpipe(intfd[2])

          函數(shù)傳入值

          fd[2]:管道的兩個(gè)文件描述符,之后就可以直接操作這兩個(gè)文件描述符

          函數(shù)返回值

          成功:0

          出錯(cuò):-1

          3.管道讀寫說明

          用pipe()函數(shù)創(chuàng)建的管道兩端處于一個(gè)進(jìn)程中,由于管道是主要用于在不同進(jìn)程間通信的,因此這在實(shí)際應(yīng)用中沒有太大意義。實(shí)際上,通常先是創(chuàng)建一個(gè)管道,再通過fork()函數(shù)創(chuàng)建一子進(jìn)程,該子進(jìn)程會(huì)繼承父進(jìn)程所創(chuàng)建的管道,這時(shí),父子進(jìn)程管道的文件描述符對(duì)應(yīng)關(guān)系如圖8.4所示。

          此時(shí)的關(guān)系看似非常復(fù)雜,實(shí)際上卻已經(jīng)給不同進(jìn)程之間的讀寫創(chuàng)造了很好的條件。父子進(jìn)程分別擁有自己的讀寫通道,為了實(shí)現(xiàn)父子進(jìn)程之間的讀寫,只需把無關(guān)的讀端或?qū)懚说奈募枋龇P(guān)閉即可。例如在圖8.5中將父進(jìn)程的寫端fd[1]和子進(jìn)程的讀端fd[0]關(guān)閉。此時(shí),父子進(jìn)程之間就建立起了一條“子進(jìn)程寫入父進(jìn)程讀取”的通道。

          圖8.4父子進(jìn)程管道的文件描述符對(duì)應(yīng)關(guān)系圖8.5關(guān)閉父進(jìn)程fd[1]和子進(jìn)程fd[0]

          同樣,也可以關(guān)閉父進(jìn)程的fd[0]和子進(jìn)程的fd[1],這樣就可以建立一條“父進(jìn)程寫入子進(jìn)程讀取”的通道。另外,父進(jìn)程還可以創(chuàng)建多個(gè)子進(jìn)程,各個(gè)子進(jìn)程都繼承了相應(yīng)的fd[0]和fd[1],這時(shí),只需要關(guān)閉相應(yīng)端口就可以建立其各子進(jìn)程之間的通道。

          想一想

          為什么無名管道只能在具有親緣關(guān)系的進(jìn)程之間建立?

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          linux相關(guān)文章:linux教程


          數(shù)字通信相關(guān)文章:數(shù)字通信原理


          通信相關(guān)文章:通信原理



          上一頁(yè) 1 2 3 4 5 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉