精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Linux中的有名管道和無名管道

系統 Linux
今天帶小伙伴們一起學習一下Linux中的有名管道和無名管道的使用,先大致介紹下有名管道和無名管道相關的內容,接著進行函數的學習,最后擼代碼!

[[382493]]

今天帶小伙伴們一起學習一下Linux中的有名管道和無名管道的使用,先大致介紹下有名管道和無名管道相關的內容,接著進行函數的學習,最后擼代碼!

1 無名管道與有名管道的區別

管道分為無名管道(pipe)和有名管道(FIFO)兩種。

無名管道只能用于公共祖先的兩個進程間的通信,原因是自己創建的管道在別的進程中并不可見。

有名管道可用于同一系統中的任意兩個進程間的通信。

1)無名管道

無名管道創建完成后,等同于操作文件。

無名管道的讀端被視作一個文件,寫端也被視作一個文件。

創建用pipe,操作用read、write、close。

① 無名管道通信是單向的,有固定的讀端和寫端。

② 數據被進程從管道讀出后,管道中的數據就不存在了。

③ 進程讀取空管道時,進程會阻塞。

④ 進程往滿的管道寫入數據時,進程會阻塞。

⑤ 管道容量最大為64KB,可以通過宏PIPE_BUFFERS進行設置。

下面補充兩個無名管道的兩個說明。

<1 關于公共祖先進程的說明。

管道可以用于任意兩個或更多相關進程之間的通信,只要在創建子進程的系列調用之前通過一個共同的祖先進程創建管道即可。

如管道可用于一個進程和其子孫進程之間的通信。第一個進程創建管道,然后創建子進程,接著子進程再創建第一個進程的孫子進程。

管道通常用于兩個兄弟進程之間的通信——它們的父進程創建了管道,并創建兩個子進程。

<2 關于無名管道半雙工的說明。

一般來說管道是半雙工的,有些系統實現了全雙工的功能,但為了方便移植盡量使用半雙工方式使用管道。

半雙工情況下,管道的兩端在一個進程中相互連接,數據需要通過內核在管道中流動。

單個進程對管道進行讀寫是沒有問題的,但應用比較多的是兩個進程之間的通信,但此時存在競爭的問題。

如果創建兩個管道,需要注意死鎖的問題。如果兩個進程都試圖從空管道中讀取數據或嘗試向已滿的管道中寫入數據就可能會發生死鎖。

此時由于半雙工的原因,就需要關閉不需要的讀端和寫端,下圖是父子進程進行通信的示意圖。

圖片

2)有名管道

有名管道又叫FIFO文件,它的操作與文件操作類似,需要創建、打開和關閉等操作。

創建用mkfifo,刪除用unlink,讀寫用read、write,打開關閉用open、close。

FIFO文件的操作與普通文件的操作差異如下:

① 讀取FIFO文件的進程只能以“RDONLY”方式打開FIFO文件。

② 寫FIFO文件的進程只能以“WRONLY”方式打開FIFO文件。

③ FIFO文件里面的內容被讀取后,就消失了。但是普通文件里面的內容讀取后還存在。

2 Linux下的無名管道

1)pipe函數

pipe函數用于創建無名管道。

① 函數原型。

  1. int pipe(int pipefd[2]) 

② 頭文件。

 

  1. include <unistd.h>  

③ 參數。

pipefd[0]:讀管道。

pipefd[1]:寫管道。

④ 返回值。

成功:0。

失敗:-1。

3 Linux下的有名管道

1)mkfifo函數

mkfifo函數用于創建有名管道。

① 函數原型。

  1. int mkfifo(const char* pathname, mode_t mode) 

② 頭文件。

  1. include <sys/type.h>  
  2.  
  3. include <sys/stat.h>  

③ 參數。

pathname:要創建的fifo文件的名字,帶路徑。

mode:要創建的fifo文件的訪問權限。

④ 返回值。

成功:0。

失敗:-1。

2)unlink函數

unlink函數用于刪除有名管道,其實它可以刪除FIFO文件,也可以刪除普通文件。

① 函數原型。

  1. int unlink(const char* pathname) 

② 頭文件。

 

  1. include <unistd.h>  

③ 參數。

pathname:要創建的fifo文件的名字,帶路徑。

④ 返回值。

成功:0。

失?。?1。

3)open函數

open函數用于打開一個有名管道。

① 函數原型。

  1. int open(constchar *pathname, int flags) 
  2. int open(constchar *pathname, int flags, mode_t mode) 

② 頭文件。

  1. #include <sys/types.h> 
  2. #include <sys/stat.h> 
  3. #include <fcntl.h> 

③ 參數。

pathname: 要打開的文件名(含路徑)。

flags: 文件打開的標志(這里只介紹兩種,更多的可以man 2 open查看)。

O_APPEND: 以追加的方式打開文件。

O_CREAT: 當打開的文件不存在的時候,創建該文件。

mode: 一定是在flags中使用了O_CREAT標志,mode記錄待創建的訪問權限。

④ 返回值。

成功:返回文件描述符。

失?。悍祷?1。

4)read函數

read函數用于讀有名管道。

① 函數原型。

  1. ssize_t read(int fd, void *buf, size_t count

② 頭文件。

 

  1. #include <unistd.h> 

③ 參數。

fd:要讀取文件的文件描述符。

buf:讀緩沖的起始地址(讀取來的數據存到buf指向的空間)。

count:讀到的字節數。

④ 返回值。

成功:讀到的字節數。

失?。悍祷?1。

5)write函數

write函數用于寫有名管道。

① 函數原型。

  1. ssize_t write(int fd, const void *buf, size_t count

② 頭文件。

 

  1. #include <unistd.h> 

③ 參數。

fd:文件描述符。

buf:文件數據緩沖區。

count:所要寫的數據字節數。

④ 返回值。

成功:寫入的字節數。

失?。悍祷?1。

6)close函數

close函數用于關閉有名管道。

① 函數原型。

  1. int close(int fd) 

② 頭文件。

 

  1. #include <unistd.h> 

③ 參數。

fd:待關閉的文件描述符。

④ 返回值。

成功:返回0。

失敗:返回-1。

4 實例代碼

下面用兩個小程序用一下上面介紹的有名管道和無名管道。

1)無名管道的使用實例

實例代碼如下,說明都在代碼注釋中了,圖片。

PipeTest.c。

  1. #include <unistd.h> 
  2.  
  3. #include <stdio.h> 
  4. #include <stdlib.h> 
  5.  
  6. void main(void) 
  7.       pid_t pid = 0;                   // 進程的pid 
  8.      
  9.       int pipefd[2];                   // 讀寫管道的文件描述符 
  10.       char buf[20];                    // 數據緩沖 
  11.           
  12.       pipe(pipefd);                    // 創建管道 
  13.      
  14.       pid = fork();                    // 創建子進程 
  15.      
  16.       if(pid > 0)                      // 父進程 
  17.       { 
  18.             close(pipefd[0]);          // 這是一個習慣,關閉不用的管道 
  19.       
  20.             write(pipefd[1],"Test pipe!",11);  // 將數據寫入管道 
  21.          
  22.             wait();                    // 等待子進程執行完退出 
  23.          
  24.             close(pipefd[1]);          // 用完關掉文件 
  25.          
  26.             exit(0);                   // 進程退出 
  27.      } 
  28.      
  29.      if(pid == 0)                      // 子進程 
  30.      { 
  31.        
  32.            close(pipefd[1]);           // 這是一個習慣,關閉不用的管道 
  33.        
  34.            read(pipefd[0],buf,11);     // 讀取管道內容,并打印 
  35.        
  36.            printf("\nThe pipe's context is %s\n\n",buf); //子進程可以讀到父進程寫入管道的內容Test! 
  37.        
  38.            close(pipefd[0]);           // 關閉管道 
  39.        
  40.            exit(0);                    // 進程退出 
  41.      }     
  42.           

運行結果如下:

2)有名管道的使用實例

實例代碼如下,說明都在代碼注釋中了。

  WriteFIFO.c。

  1. #include <sys/types.h> 
  2. #include <sys/stat.h> 
  3. #include <fcntl.h> 
  4. #include <stdio.h> 
  5.  
  6. int main(void) 
  7.       int fifofd;                          // FIFO文件描述符 
  8.       int ret; 
  9.      
  10.       mkfifo("/tmp/fifo",0666);            // 創建FIFO文件 
  11.      
  12.       fifofd = open("/tmp/fifo",O_WRONLY); // 打開FIFO文件 
  13.      
  14.       ret = write(fifofd,"Test FIFO!",11); // 寫數據到FIFO文件,等待讀成功才返回 
  15.      
  16.       close(fifofd);                       // 關閉FIFO文件 
  17.      
  18.       return 0;   

 ReadFIFO.c。

  1. #include <sys/types.h> 
  2. #include <sys/stat.h> 
  3. #include <fcntl.h> 
  4. #include <stdio.h> 
  5.  
  6. void main(void) 
  7.       int fifofd;                                   // 管道文件描述符 
  8.       char buf[20];                                 // 數據緩沖 
  9.     
  10.       mkfifo("/tmp/fifo",0666);                     // 創建FIFO文件 
  11.      
  12.       fifofd = open("/tmp/fifo",O_RDONLY);          // 打開FIFO文件 
  13.      
  14.       read(fifofd,buf,11);                          // 讀FIFO文件 
  15.      
  16.       printf("\nThe FIFO's content is %s\n\n",buf); // 顯示讀到FIFO文件的內容 
  17.      
  18.       unlink("/tmp/fifo");                          // 刪除FIFO文件 

運行結果如下:

先運行WriteFIFO操作,此時會阻塞,接著運行ReadFIFO,打印并解除阻塞。

本文轉載自微信公眾號「嵌入式雜牌軍」,可以通過以下二維碼關注。轉載本文請聯系嵌入式雜牌軍公眾號。

 

責任編輯:武曉燕 來源: 嵌入式雜牌軍
相關推薦

2020-10-10 07:18:14

Linux系統編程管道

2018-09-10 08:45:04

Linux管道命令

2023-08-08 07:18:17

協程管道函數

2022-11-14 15:07:09

Linux管道

2020-04-17 08:34:39

Linux管道

2020-02-24 11:37:56

Linux重定向管道

2021-07-06 21:30:06

Linux進程通信

2019-05-13 10:00:41

Linux進程間通信命令

2010-01-21 11:22:35

Linux多線程同步

2021-09-30 10:45:33

Linux進程通信

2014-07-02 21:20:56

CA TechnoloAPI

2010-10-25 16:52:48

oracle管道函數

2009-06-17 17:13:40

UNIX

2009-06-17 09:11:24

Unix管道重定向

2023-06-13 08:00:00

機器學習PythonMLOps

2020-12-09 11:10:12

shellLinux管道

2023-06-26 14:03:31

2014-04-25 10:13:00

Go語言并發模式

2022-11-21 06:55:08

golang協程

2019-11-27 10:36:11

進程通信IPC
點贊
收藏

51CTO技術棧公眾號

日韩少妇视频| 午夜一区二区三区四区| 国产一级成人av| 欧美日韩黄色大片| 亚洲精品tv久久久久久久久| 国产精品久久久久久久成人午夜| 最新国产精品| 亚洲视频在线观看| 久久综合桃花网| 美女100%一区| 亚洲精品你懂的| 粉嫩av一区二区三区免费观看 | 亚洲啪啪综合av一区二区三区| 欧美日韩日本国产亚洲在线| 最新黄色网址在线观看| 一级全黄肉体裸体全过程| 中文字幕在线综合| 丰乳肥臀在线| 欧美极品xxx| 国产精品theporn88| 超碰在线97观看| 好吊一区二区三区| 综合久久五月天| 亚洲精品乱码久久久久久蜜桃欧美| 九九热线视频只有这里最精品| 亚洲精品ww久久久久久p站| 你懂的视频在线一区二区| 国产不卡av在线播放| 亚洲日本欧美| 久久国产精品视频| 黄色三级生活片| 免费成人蒂法| 日韩午夜av一区| 国产精品视频黄色| 亚洲精品**中文毛片| 亚洲精品国产一区二区精华液| 欧美日韩一区二区三区在线视频| 精品人妻少妇AV无码专区| 日韩电影一区二区三区四区| 国内精品中文字幕| 黄色精品视频在线观看| 精品久久影视| 亚洲男人av在线| 亚洲欧美在线不卡| 18国产精品| 欧美午夜一区二区三区| 日韩欧美精品在线观看视频| 人妻丰满熟妇av无码久久洗澡| 国产女人在线观看| 99国产精品久久久久| 成人天堂资源www在线| 欧美性淫爽ww久久久久无| 乱妇乱女熟妇熟女网站| aa视频在线观看| 亚洲一二三专区| 国产黄色激情视频| 人人澡人人添人人爽一区二区| 最新中文字幕一区二区三区| 亚洲精品成人自拍| 98在线视频| 国产精品不卡在线| 中文字幕日韩精品一区二区| 日本三级在线播放完整版| 国产精品国产三级国产aⅴ原创| 色一情一区二区三区四区 | 亚洲妇女成熟| 一本色道综合亚洲| 国产精品入口免费软件| 日韩成人一区| 日韩欧美资源站| 丰满少妇xbxb毛片日本| 欧美美女啪啪| 亚洲欧洲在线播放| 99成人在线观看| 亚洲精品一二三区区别| 欧美成在线视频| 国产中文字字幕乱码无限| 黄色国产精品| av在线国产精品| a视频在线免费看| 久久99精品国产麻豆婷婷| 国产精品视频在线播放| 在线播放精品视频| 国产精品99精品久久免费| 国产一级精品aaaaa看| 青春有你2免费观看完整版在线播放高清| 99在线精品一区二区三区| 久久久久久精| 在线观看二区| 亚洲综合色自拍一区| 日韩精品―中文字幕| abab456成人免费网址| 在线播放欧美女士性生活| 亚洲熟妇一区二区| 国产99精品一区| 久久国产视频网站| 97超碰人人干| 麻豆精品在线视频| 国产日韩三区| 日本最黄一级片免费在线| 亚洲国产一区二区三区青草影视| 日韩中文字幕二区| 国产精品日本一区二区不卡视频| 亚洲国产成人精品女人久久久| 亚洲精品国产91| 欧美日韩综合| 国产精品爱久久久久久久| 国内精品偷拍视频| 久久精品免费在线观看| 男人日女人的bb| 精品免费av在线| 欧美第一区第二区| 国产中文字幕久久| 亚洲免费在线| 99www免费人成精品| 95在线视频| 欧美日韩国产精品专区| 欧美国产在线一区| 成人羞羞网站入口免费| 国外色69视频在线观看| 国产精品久久久久精| 久久网这里都是精品| av在线免费观看国产| 欧美一级做a| 亚洲色图第三页| 国产无码精品在线播放| 国产麻豆精品一区二区| 亚洲免费在线精品一区| 91精品论坛| 亚洲国产日韩一区| 久久久久成人网站| 国产综合久久久久久久久久久久| 欧美第一黄网| av午夜在线观看| 日韩久久久精品| 黄色片在线观看网站| 免费看欧美美女黄的网站| 久热国产精品视频一区二区三区| 免费不卡av| 日韩区在线观看| 中文字幕亚洲欧美日韩| 久久66热re国产| 伊人久久青草| 婷婷成人av| 日韩中文字幕网| 精品国产www| 久久精品亚洲一区二区三区浴池| 免费在线观看亚洲视频| 国产精品欧美大片| 欧美精品videos性欧美| 亚洲第一免费视频| 亚洲精品老司机| av影片在线播放| 亚洲视频日本| 国产在线精品一区二区三区| 丁香高清在线观看完整电影视频| 欧美tk—视频vk| 国产午夜久久久| caoporm超碰国产精品| 五月丁香综合缴情六月小说| 国产精品18hdxxxⅹ在线| 69av在线播放| 日本1级在线| 欧美亚洲动漫另类| 黑人狂躁日本娇小| 国产精品99久久久| 欧美综合在线播放| 欧美热在线视频精品999| 国产精品免费一区豆花| 国产精品剧情一区二区在线观看| 91精品国产免费| 精品无码m3u8在线观看| 91年精品国产| 国产九九热视频| 欧美一区二区三区免费看| 国产精品18毛片一区二区| 美女扒开腿让男人桶爽久久软| 亚洲欧美精品一区| 一区二区日韩视频| 亚洲高清三级视频| 精品人妻无码一区二区三区 | 欧美一区二区三区红桃小说| 日本欧美爱爱爱| 秋霞午夜在线观看| 欧美电影免费观看完整版 | 欧美日韩一本到| 美女福利视频在线观看| 91丨porny丨中文| 国产喷水theporn| 精品不卡视频| 日韩偷拍一区二区| 97人人澡人人爽91综合色| 欧美在线日韩在线| 精品麻豆一区二区三区| 日韩成人性视频| 91欧美日韩麻豆精品| 亚洲高清免费视频| 妖精视频在线观看免费| 不卡电影一区二区三区| 五月天婷婷亚洲| 国产女优一区| 日韩精品一区二区三区电影| 免费成人高清在线视频theav| 成人有码在线视频| 六月婷婷综合| 久久久久久伊人| 欧洲美女少妇精品| 亚洲精品日韩久久久| 国产女18毛片多18精品| 色一情一伦一子一伦一区| 久久久久久久久久综合| 国产精品久久久久久久裸模| 你懂得在线视频| 国产麻豆精品在线| 成年网站在线播放| 国产日韩一区二区三区在线播放| 成人在线观看毛片| 日韩系列欧美系列| 日本一区高清不卡| 偷拍精品福利视频导航| 7777精品伊久久久大香线蕉语言| 成人免费福利| 91国产在线精品| 可以在线看的av网站| 88av在线播放| 国产视频第一页在线观看| 亚洲一区二区三区中文字幕在线观看| 亚洲精一区二区三区| 亚洲va欧美va国产综合久久| 一区二区视频免费完整版观看| 欧美精品videos另类日本| 黄色网址视频在线观看| 最近更新的2019中文字幕| 天堂av网在线| 亚洲成人av在线| 高清乱码毛片入口| 国产亚洲精品aa午夜观看| 国产精品视频成人| 女厕盗摄一区二区三区| 国外成人在线视频| av最新在线| 韩日欧美一区二区| 好久没做在线观看| 久久久久久免费精品| 韩国日本一区| 国内精品久久久久久| segui88久久综合| 欧美极品美女电影一区| 黄色羞羞视频在线观看| 久久久久久久久久久成人| 神马午夜伦理不卡 | 国产欧美日韩一区二区三区在线| 国产一区二区四区| 尤物网精品视频| 黄色一级视频片| 美女爽到呻吟久久久久| 亚洲视频在线观看一区二区三区| 首页国产欧美久久| 韩国中文字幕av| 国产一区二区三区在线观看精品| 午夜大片在线观看| 国产jizzjizz一区二区| 日本天堂在线播放| 91网址在线看| 国产视频不卡在线| 日韩美女视频一区二区| 久热精品在线观看| 黄色一区二区在线| 潘金莲一级淫片aaaaaa播放| 欧美日韩一区二区三区高清 | 青青草视频国产| 亚洲青色在线| 欧美精品成人网| 激情欧美一区二区| 中文字幕三级电影| 欧美国产丝袜视频| 欧美精品一区二区成人| 欧美日韩激情网| 97超碰人人草| 黄色成人av网站| 在线观看中文字幕亚洲| 久久青青草原亚洲av无码麻豆| 奇米精品一区二区三区在线观看 | 国产亚洲精品久久久久动| 91caoporn在线| 久久久久久久91| 成人视屏在线观看| 99re视频在线| 精品久久久久久久久久久下田| 小泽玛利亚av在线| 模特精品在线| 小日子的在线观看免费第8集| 91在线观看地址| 久久精品一区二区三区四区五区| 亚洲成a人v欧美综合天堂下载| 精品乱码一区内射人妻无码| 欧美sm美女调教| 亚洲搞黄视频| 欧美壮男野外gaytube| 成人综合日日夜夜| 欧美日韩国产精品一卡| 午夜视频精品| 污视频网站观看| 91免费观看视频| 久久国产免费观看| 欧美午夜在线观看| 日本韩国一区| 欧美国产中文字幕| 五月天色综合| 奇米888一区二区三区| 一区二区视频欧美| 91精品视频国产| 国产欧美精品一区| 中文字幕亚洲高清| 欧美videos中文字幕| 黄色网页在线播放| 国产精品精品一区二区三区午夜版 | 日本a在线播放| 日本不卡免费高清视频| 成人线上播放| 热久久最新地址| 激情av综合网| 国产在线综合视频| 色综合视频在线观看| 欧美特级特黄aaaaaa在线看| 久久伊人免费视频| 欧美极品在线| 相泽南亚洲一区二区在线播放 | 九九热免费在线观看| 久久精品亚洲乱码伦伦中文 | 欧美日韩电影在线| av在线女优影院| 国产精品99一区| 国产91精品对白在线播放| 免费在线观看日韩视频| 99国内精品久久| 99视频在线看| 亚洲成在人线av| av老司机免费在线| 韩国成人动漫在线观看| 亚洲日本免费| 国产精品300页| 精品毛片网大全| 日韩二区三区| 国产成人久久久| 国内精品久久久久久久久电影网 | 国产伦精品一区二区三区免费迷| 国产精品视频看看| 欧美久久久久久久久中文字幕| a√在线中文网新版址在线| 国产精品人成电影| 久久一区二区三区喷水| jizz18女人| 综合自拍亚洲综合图不卡区| 91成人在线免费| 麻豆国产精品va在线观看不卡| 国产成人免费av一区二区午夜 | 久久精品国产99久久6| 欧美乱大交做爰xxxⅹ小说| 欧美日韩精品系列| 好了av在线| 99久久自偷自偷国产精品不卡| 影音先锋中文字幕一区| 日本黄色网址大全| 欧美午夜片在线观看| 国产一二区在线观看| 成人国产一区二区| 99精品国产在热久久下载| 欧美图片一区二区| 欧美日韩国产123区| 欧美日韩经典丝袜| 欧美大陆一区二区| 老司机午夜精品| 青娱乐在线视频免费观看| 亚洲国产小视频在线观看| xx欧美视频| 椎名由奈jux491在线播放 | 久久国产高清视频| 日韩欧美一二三区| 亚洲精品一区| 国产精品美女在线播放| 床上的激情91.| 日韩精品一区二区亚洲av观看| 北条麻妃一区二区三区中文字幕| 日韩一区二区三区高清在线观看| 久久综合九色综合88i| 国产欧美精品一区| 国产小视频免费观看| 国产精品高潮粉嫩av| 综合五月婷婷| 在线不卡av电影| 日韩欧美国产一区在线观看| 欧洲亚洲两性| 2022中文字幕| 国产视频亚洲色图| 国内爆初菊对白视频| 国产精品免费在线免费| 国产主播精品| 99自拍偷拍视频| 日韩精品在线观看视频|