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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux操作系统进程间通信IPC之管道pipe及FIFO

發(fā)布時(shí)間:2023/11/30 linux 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux操作系统进程间通信IPC之管道pipe及FIFO 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? ? linux環(huán)境下,各進(jìn)程相互獨(dú)立,如果想要交換兩個(gè)進(jìn)程之間的數(shù)據(jù),需要通過內(nèi)核,在內(nèi)存中提供一個(gè)緩存區(qū),一個(gè)進(jìn)程往緩存區(qū)中寫數(shù)據(jù),一個(gè)往緩存區(qū)讀數(shù)據(jù),內(nèi)核提供的這種機(jī)制稱為進(jìn)程間通信(IPC),常見的進(jìn)程通信有四種:管道(最簡單),信號(hào)(開銷最小),共享映射區(qū)(無血緣關(guān)系),本地套接字(最穩(wěn)定)。

? ? ? (1)管道

? ? ?管道的特點(diǎn):本質(zhì)是一個(gè)偽文件(內(nèi)核緩沖區(qū)),兩個(gè)文件描述符引用(讀端和寫端),寫端寫入,讀端讀出。

? ? ?管道的原理及實(shí)質(zhì):內(nèi)核使用環(huán)形隊(duì)列機(jī)制,借助內(nèi)核緩沖區(qū)實(shí)現(xiàn)。

? ? ?管道的缺點(diǎn):1)數(shù)據(jù)自己讀不能自己寫;2)數(shù)據(jù)被讀走,不在管道存在;3)半雙工通信(數(shù)據(jù)讀寫不能同時(shí),數(shù)據(jù)流向唯一);4)有血緣關(guān)系的進(jìn)程間;

? ? ?創(chuàng)建管道pipe函數(shù):

? ? ?函數(shù)頭文件及原型:函數(shù)參數(shù)為輸入?yún)?shù)? ? ? ?成功調(diào)用返回0 ,失敗返回-1

? ?

? 函數(shù)調(diào)用成功返回r/w兩個(gè)文件,無需open,但是需要手動(dòng)close,其中pipefd[0] -->r,pipefd[1]-->w,可根據(jù)讀寫要求關(guān)閉pipe的一端來實(shí)現(xiàn)進(jìn)程通信;

? 管道中的讀寫情況有四種:

? ? ?1)讀管道時(shí)? ? 1.管道有數(shù)據(jù),read返回實(shí)際讀到的字節(jié)數(shù);

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.管道中無數(shù)據(jù)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1>管道寫端全部關(guān)閉,read返回0,表示讀到文件末尾;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2>官渡寫端沒有關(guān)閉,read阻塞等待數(shù)據(jù)來;

? ?2)寫管道時(shí)? ? ? 1.管道讀端全部關(guān)閉,進(jìn)程異常終止

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.管道讀端沒有關(guān)閉

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1>管道已滿,write阻塞

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2>管道未滿,write寫入數(shù)據(jù),返回實(shí)際寫入的字節(jié)數(shù)。

使用管道實(shí)現(xiàn)父子通信,實(shí)現(xiàn)ls |wc -l? ,父進(jìn)程實(shí)現(xiàn)ls.子進(jìn)程實(shí)現(xiàn)wc -l;

使用管道實(shí)現(xiàn)兄弟進(jìn)程通信,兄:ls? 弟? wc -l? 父 等待回收子進(jìn)程

(2)FIFO? ?命名管道(不想關(guān)的進(jìn)程也可以進(jìn)行通信)

?特點(diǎn):屬于基礎(chǔ)文件類型的一種,FIFO文件在磁盤上沒有數(shù)據(jù)塊,只有用來表示內(nèi)核的一條通道,各進(jìn)程可以打開這個(gè)文件進(jìn)行read/write。

創(chuàng)建方式:命令? mkfifo 管道名

? ? ? ? ? ? ? ? ? ?庫函數(shù) int mkfifo(const char*pathname,mode_t mode);? 成功:0 失敗 -1;

使用mkfifo創(chuàng)建了一個(gè)FIFO,就可以用open打開它,常見的i/o函數(shù)都可以作用于fifo.

如博客https://blog.csdn.net/superywf/article/details/73438465的例子使用如下:

總結(jié)

以上是生活随笔為你收集整理的linux操作系统进程间通信IPC之管道pipe及FIFO的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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