7分鐘前 陜西玻纖增強(qiáng)聚丙烯FRPP管品牌詢價(jià)咨詢「星馳」[星馳60b5ccc]內(nèi)容:在主進(jìn)程中利用fork()函數(shù)創(chuàng)建一個(gè)子進(jìn)程,這樣父子進(jìn)程同時(shí)擁有對(duì)同一管道的讀寫句柄,因?yàn)楣艿罌]有提供鎖定的保護(hù)機(jī)制,所以必須決定數(shù)據(jù)的流動(dòng)方向,然后在相應(yīng)進(jìn)程中關(guān)閉不需要的句柄。這樣,就可以使用read()和write()函數(shù)來(lái)對(duì)它進(jìn)行讀寫操作了。使用無(wú)名管道進(jìn)行進(jìn)程間通信的步驟概述如下:①創(chuàng)建所需的管道;②生成(多個(gè))子進(jìn)程;③關(guān)閉/文件描述符,使之與相應(yīng)的管道末端相聯(lián)系;

若管道為空,且寫端文件描述字未關(guān)閉,則被阻塞。若管道寫端已關(guān)閉,則返回0。若管道不為空,分兩種情況:(設(shè)管道中實(shí)際有m個(gè)字節(jié)),如n>=m,則讀m個(gè);如果n<m則讀取n個(gè)。實(shí)際讀取的數(shù)目作為read的返回值。2.2.4 關(guān)閉管道close函數(shù)關(guān)閉寫端則導(dǎo)致讀端read調(diào)用返回0;關(guān)閉讀端,則導(dǎo)致寫端write調(diào)用返回-1,errno被設(shè)為EPIPE,在寫端write函數(shù)退出前,進(jìn)程還會(huì)收到SIGPIPE信號(hào)(默認(rèn)處理是終止進(jìn)程,該信號(hào)可以捉)。

文件描述符的dup2intdup2(intfdl,intfd2);文件描述符fdl到fd2。fd2可以是空閑的文件描述符,如果fd2是已打開文件,則關(guān)閉fd2;如果fd1不是有效的描述符,則不關(guān)閉fd2,調(diào)用失敗。2.3 關(guān)于無(wú)名管道需要注意的幾個(gè)問題①管道是半雙工方式,數(shù)據(jù)只能單向傳輸。如果要在兩個(gè)進(jìn)程之間相互傳送數(shù)據(jù),就要建立兩條管道。②pipe()調(diào)用必須在調(diào)用fork()以前進(jìn)行,否則子進(jìn)程將無(wú)法繼承文件描述符。③使用無(wú)名管道互相連接的任意進(jìn)程必須位于一個(gè)相關(guān)的進(jìn)程家族里。
