免费A级毛片无码专区网站-成人国产精品视频一区二区-啊 日出水了 用力乖乖在线-国产黑色丝袜在线观看下-天天操美女夜夜操美女-日韩网站在线观看中文字幕-AV高清hd片XXX国产-亚洲av中文字字幕乱码综合-搬开女人下面使劲插视频

一 Linux進程間通信

進程間通信概念:進程是一個獨立的資源分配單位,不同進程之間有關(guān)聯(lián),不能在一個進程中直接訪問另一個進程的資源 。

  • 進程和進程之間的資源是相互獨立的,一個進程不能直接訪問另外一個進程的資源,但是進程和進程之間不是相互獨立的 。
通信目的:
  • 數(shù)據(jù)傳輸:一個進程需要將它的數(shù)據(jù)發(fā)送給另一個進程 。
  • 資源共享:多個進程之間共享同樣的資源 。
  • 通知事件:一個進程需要向另一個或一組進程發(fā)送消息,通知某些或某個進程發(fā)生了某種事件(如進程終止時要通知父進程) 。
  • 進程控制:有些進程希望完全控制另一個進程的執(zhí)行(如Debug進程),此時控制進程希望能夠攔截另一個進程的所有陷入和異常,并能夠及時知道它的狀態(tài)改變 。
如何實現(xiàn)進程通信?
要讓兩個不同的進程實現(xiàn)通信,前提條件是讓它們看到同一份資源 。所以要想辦法讓他們看到同一份資源,就需要采取一些手段,可以分為下面幾種 。
通信方式分類1.管道
  • 匿名管道pipe
  • 命名管道
2.System V IPC
  • System V 消息隊列
  • System V 共享內(nèi)存
  • System V 信號量
3.POSIX IPC
  • 消息隊列
  • 共享內(nèi)存
  • 信號量
  • 互斥量
  • 條件變量
  • 讀寫鎖
管道概念:我們把一個進程連接到另一個進程的一個數(shù)據(jù)流稱為一個“管道” 。
管道的特點:
  • 數(shù)據(jù)只能從管道的一端寫入,從另一端讀出
  • 寫入管道的數(shù)據(jù)遵循先入先出的原則
  • 管道所傳達的數(shù)據(jù)是無格式的,這要求管道的讀出方和寫入方必須事先約定好數(shù)據(jù)的格式
  • 管道不是普通的文件,不屬于某個文件系統(tǒng),只存在于內(nèi)存中
  • 管道讀數(shù)據(jù)是一次性的,數(shù)據(jù)一旦被讀走,它就從管道中拋棄,釋放空間
  • 管道是一種特殊的文件類型,會在應用層打開兩個文件描述符fd[0]對應的是寫端,fd[1]對應的是讀端
  • 管道只能服務于有血緣關(guān)系的兩個進程

一 Linux進程間通信

文章插圖
匿名管道創(chuàng)建匿名管道-----pipe系統(tǒng)調(diào)用intpipe(int pidefd[2]);
功能:創(chuàng)建無名管道
參數(shù):pipefd:為int類型數(shù)組的首地址,其存放了管道的文件描述符pipefd[0]、pipefd[1]
當一個管道建立的時候,他會創(chuàng)建兩個文件描述符fd[0]和fd[1] 。其中fd[0]固定用于讀管道,而fd[1]固定用于寫管道 。
返回值:成功:0失敗:-1
  • 文件描述符就是操作系統(tǒng)為了高效管理已經(jīng)打開文件所創(chuàng)建的一個索引(文件描述符在前面的文章介紹過)
匿名管道創(chuàng)建原理:
調(diào)用pipe函數(shù)后,OS會在fd_array數(shù)組中分配兩個文件描述符給管道,一個是讀,一個是寫,并把這兩個文件描述符放到用戶傳進來的數(shù)組中,fd[0]代表管道讀端,fd[1]代表管道寫端 。這樣一個管道就創(chuàng)建好了 。
一 Linux進程間通信

文章插圖
實例演示:
實例1:觀察兩個文件描述符的值
#include <stdio.h>#include <unistd.h>int main(){ int pipefd[2]; int ret = pipe(pipefd); if (ret == -1){// 管道創(chuàng)建失敗perror("make piep");//用于退出進程exit(-1); } // 成功返回0 // pipefd[0] 代表讀端 // pipefd[1] 代表寫端 printf("fd[0]:%d, fd[1]:%d\n", pipefd[0], pipefd[1]); return0;}運行結(jié)果如下:
一 Linux進程間通信

文章插圖
顯然,pipefd這個數(shù)組里面放的是兩個文件描述符,分別是3和4,因為0,1,2文件描述符在進程創(chuàng)建的時候會由系統(tǒng)自動創(chuàng)建 。

經(jīng)驗總結(jié)擴展閱讀