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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

管道通信

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

一、進(jìn)程通信的目的:?
1.數(shù)據(jù)傳輸:一個(gè)進(jìn)程需要將它的數(shù)據(jù)發(fā)送給另一個(gè)進(jìn)程?
2.資源共享:多個(gè)進(jìn)程之間共享同樣的資源?
3.通知事件:一個(gè)進(jìn)程需要向另一個(gè)或一組進(jìn)程發(fā)送消息,通知它們發(fā)生了某種事件?
4.進(jìn)程控制:有些進(jìn)程希望完全控制另一個(gè)進(jìn)程的執(zhí)行(如Debug進(jìn)程),此時(shí)控制進(jìn)程希望能夠攔截另一個(gè)進(jìn)程的所有操作,并能夠及時(shí)知道它的狀態(tài)改變

二、管道通信?
? 管道是單向的、先進(jìn)先出的,它把一個(gè)進(jìn)程的輸出和另一個(gè)進(jìn)程的輸入連接在一起。

? 一個(gè)進(jìn)程(寫進(jìn)程)在管道的尾部寫入數(shù)據(jù),另一個(gè)進(jìn)程(讀進(jìn)程)從管道的頭部讀出數(shù)據(jù)

? 數(shù)據(jù)被一個(gè)進(jìn)程讀出后,將被從管道中刪除,其它讀進(jìn)程將不能再讀到這些數(shù)據(jù)。

? 管道提供了簡(jiǎn)單的流控制機(jī)制,進(jìn)程試圖讀空管道時(shí),進(jìn)程將阻塞。同樣,管道已經(jīng)滿時(shí),進(jìn)程再試圖向管道寫入數(shù)據(jù),進(jìn)程將阻塞

? 管道包括無(wú)名管道和有名管道兩種,前者用于父進(jìn)程和子進(jìn)程間的通信,后者可用于運(yùn)行于同一系統(tǒng)中的任意兩個(gè)進(jìn)程間的通信。?
無(wú)名管道創(chuàng)建:?
int pipe(int filedis[2]);?
當(dāng)一個(gè)管道建立時(shí),它會(huì)創(chuàng)建兩個(gè)文件描述符:?
filedis[0] 用于讀管道,?
filedis[1] 用于寫管道

? 創(chuàng)建管道pipe?
讀管道read?
寫管道write?
關(guān)閉管道close

? 管道用于不同進(jìn)程間通信。通常先創(chuàng)建一個(gè)管道,再通過(guò)fork函數(shù)創(chuàng)建一個(gè)子進(jìn)程,該子進(jìn)程會(huì)繼承父進(jìn)程所創(chuàng)建的管道

? 1.管道通訊是單向的,有固定的讀端和寫端。2. 數(shù)據(jù)被進(jìn)程從管道讀出后,在管道中該數(shù)據(jù)就不存在了。3. 當(dāng)進(jìn)程去讀取空管道的時(shí)候,進(jìn)程會(huì)阻塞。4. 當(dāng)進(jìn)程往滿管道寫入數(shù)據(jù)時(shí),進(jìn)程會(huì)阻塞。5. 管道容量為64KB

? 必須在系統(tǒng)調(diào)用fork( )前調(diào)用pipe( ),否則子進(jìn)程將不會(huì)繼承文件描述符

函數(shù)整理:?
①pipe?
函數(shù)的作用:建立無(wú)名管道?
函數(shù)的原型:int pipe(int filedes[2]);?
頭文件:#include < unistd.h >?
返回值:成功0,出錯(cuò)-1

②mkfifo?
函數(shù)的作用:創(chuàng)建有名管道?
函數(shù)的原型:int mkfifo(const char *filename,mode_t mode);?
參數(shù)的作用:filename:有名管道的路徑、名稱?
mode:管道的方式?
返回值:成功0,出錯(cuò)-1

③kill?
函數(shù)的作用:傳送信號(hào)給指定的進(jìn)程?
函數(shù)的原型:int kill(pid_t pid,int sig);?
函數(shù)的參數(shù):pid > 0:將信號(hào)傳給進(jìn)程識(shí)別碼為pid的進(jìn)程?
pid = 0:將信號(hào)傳給和目前進(jìn)程相同進(jìn)程組的所有進(jìn)程?
pid = -1:將信號(hào)廣播傳送給系統(tǒng)內(nèi)所有的進(jìn)程?
pid < 0:將信號(hào)傳給進(jìn)程組識(shí)別碼為pid絕對(duì)值的所有進(jìn)程?
sig:信號(hào)?
返回值:成功0,出錯(cuò)-1?
頭文件:#include < sys/types.h >?
#include < signal.h >

④raise?
函數(shù)的作用:發(fā)送信號(hào)給自身?
函數(shù)的原型:int raise(int sig);?
頭文件:#include < signal.h >

⑤alarm?
函數(shù)的作用:設(shè)置信號(hào)傳送鬧鐘?
函數(shù)的原型:unsigned int alarm(unsigned int second);?
返回值:返回之前鬧鐘的剩余秒數(shù),如果之前未設(shè)鬧鐘則返回0

⑥pause?
函數(shù)的作用:讓進(jìn)程暫停直到信號(hào)出現(xiàn)?
函數(shù)的原型:int pause(void);?
返回值:-1

總結(jié)

以上是生活随笔為你收集整理的管道通信的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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