1. 程式人生 > >UNP第二章 第三章 Posix IPC & system v IPC

UNP第二章 第三章 Posix IPC & system v IPC

最近兩天將UNP的第二章和第三章看了下,主要講解了unix系統下兩種IPC,包括POSIX的IPC和system v下的IPC,兩種IPC的使用是不相同的。

POSIX下IPC主要包括三種:

posix message queue

posix semaphores

posix shared memory

sysytem v IPC包括:

system v message queue

system v semaphores

system v shared memory

在POSIX IPC中,每個IPC物件是有名稱的,而且名稱是一個很重要的概念,posix ipc使用ipc的名稱作為ipc的標識。mq_open  sem_open  shm_open三個函式的第一個引數就是這個名稱,這個名稱不一定是在檔案系統中存在的名稱。

後面的看的不太懂,後面到相關章節的時候再補充吧。

要使用IPC物件,需要建立或者開啟,這與檔案操作類似,主要是使用mq_open、sem_open、shm_open函式操作。在建立或者開啟ipc物件時需要指定操作的mode,例如O_RONLY、O_WRONLY、O_RDWR、O_CREAT、O_EXCL等,IPC物件是有一定許可權的,與檔案的許可權類似。

posix ipc最重要的一個是ipc物件的名稱,後面可能還會用到

system v ipc

sysytem v IPC包括:

system v message queue

system v semaphores

system v shared memory

system v ipc中有一個重要的型別是key_t,在msget、semget、shmget函式操作中都需要利用這個型別是引數。系統中對每個ipc物件都會有一個結構體來標識:

int  msgget(key_t  key,  int oflag);

int  semget(key_t key, int nsems,  int oflag);

struct ipc_perm//該結構體在不同的系統中具體實現是不同的

{

uid_t  uid;

gid_t  gid;

uid_t  cuid;

gid_t  cgid;

mode_t  mode;

ulong_t  seq;

key_t   key;//這個就是ipc的key

};

要想獲得key_t型別,一般有兩種方法:一個是利用ftok()函式呼叫;另外是將key設定為IPC_PRIVATE

ftok函式是利用檔名和id來產生key_t型別的。

key_t  ftok(const  char *pathname,  int id);

在ftok的實現中一般是利用stat函式來操作的。stat pathname檔案,獲得該檔案的資訊,然後利用stat結構中st_dev、st_ino和id生成對應的key。ftok的一種實現如下:

image

如果不利用ftok的話,可以直接將key設定為IPC_PRIVATE,這樣會保證每次建立一個ipc物件

當然建立每個system v ipc物件時會指定操作許可權。與檔案許可權類似。

在system v ipc物件中有一個識別符號重用的問題,理解的不太透徹。

另外由於system v ipc在檔案系統中沒有標識,所以利用ls和rm命令是無法操作這些ipc物件的,不過可以利用ipcs和ipcrm命令來檢視、刪除這些ipc物件

另外,ipc物件的key是全域性可見的,不這個與檔案描述符略有不同。即如果一個程序建立了一個ipc物件,那麼其他程序也是可以根據ipc的標識直接進行訪問的。例如一個伺服器建立了一個ipc物件,那麼client可以直接根據ipc的標識對ipc物件進行訪問。

參考:

UNP 第二卷 第二章和第三章

相關推薦

UNP第二 Posix IPC & system v IPC

最近兩天將UNP的第二章和第三章看了下,主要講解了unix系統下兩種IPC,包括POSIX的IPC和system v下的IPC,兩種IPC的使用是不相同的。 POSIX下IPC主要包括三種: posix message queue posix semaphores p

北大青鳥第二SQL編程 使用變量和if-else

score blog 時間 version weight 姓名 學生 查詢語句 sco 1 --聲明變量 2 declare @age int 3 declare @name varchar(20) 4 5 6 --賦值(常量值) 7 set @age=

CSAPP深入理解計算機系統(第二版)家庭作業答案

《深入理解計算機系統(第二版)》CSAPP 第三章 家庭作業 這一章介紹了AT&T的彙編指令 比較重要 本人完成了《深入理解計算機系統(第二版)》(以下簡稱CSAPP)第三章的家庭作業,並與網上的一些答案進行了對比修正。 感謝博主summerhust的整理,以下貼出AT&T常用匯編指令

具體數學第二習題(4)

46 (1)證明: 首先有$2n(n+1)=\left \lfloor 2n(n+1)+\frac{1}{2} \right \rfloor=\left \lfloor 2(n^{2}+n+\frac{1}{4}) \right \rfloor=\left \lfloor 2(n+\frac{1}{2})^

具體數學第二習題(3)

31 $\left \lfloor x \right \rfloor+\left \lfloor y \right \rfloor+\left \lfloor x+y \right \rfloor=\left \lfloor x+\left \lfloor y \right \rfloor \right \r

第一部分 簡介(第一 簡介 + 第二 Posix IPC + System V IPC)

前言應用程式三種構建方法:函式間通過引數返回值來交換資訊的龐大程式;多個程式或程序間通過某種形式的IPC進行通訊;程式包含多個執行緒,執行緒間使用某種IPC。後兩種方法可減少指定任務時間。4種不同的IPC:訊息傳遞(管道,FIFO,訊息佇列);同步(互斥量,條件變數,訊號量

第二

循環 tony end eve class body pen 列表 eric 3、寫代碼,有如下列表,按照要求實現每一個功能 li=[‘alex‘, ‘eric‘, ‘rain‘] 計算列表長度並輸出 列表中追加元素“seven”,並輸出添加後的列表 請在列表的第1個位置

【軟件構造】第二節 設計規約

between 標準 throws 規約 iter 數據類型 需求 否則 line 第三章第二節 軟件規約   這一節我們轉向關註“方法/函數/操作”是如何定義的,即討論編程中的動詞,規約。 Outline 一個完整的方法 什麽是設計規約,我們為什麽需要他 行為等價性 規

演算法競賽入門經典(第二版)陣列和字串習題3-4週期串

如果一個字串可以由某個長度為k的字串重複多次得到,則稱該串以k為週期。例如abcabcabc以3為週期(注意,它也以6和12為週期)。輸入一個長度不超過80的字串,輸出其最小週期 #include<stdio.h> int main() { char a[100];

演算法競賽入門經典(第二版)陣列和字串習題3-3數數字

把前n(n<=10000)個整數順次解除安裝一起:123456789101112…數一數0~9各出現多少次(輸出10個整數,分別是0,1,…,9出現的次數) #include<stdio.h> #define N 100000 char s[N],temp[10]; i

演算法競賽入門經典(第二版)陣列和字串習題3-2分子量

給出一種物質的分子式不帶括號,求分子量。本題中的分子式只包含4種原子分別為CHON,原子量分別為12.01,1.008,16.00,14.01(單位g/mol)。例如,C6H5OH的分子量是94.108g/mol #include <stdio.h> int main() {

演算法競賽入門經典(第二版)陣列和字串習題3-1得分

給出一個由O和X組成的串(長度1-80)統計得分。每個O的得分為目前連續出現的O的個數,X的得分為0。 #include <stdio.h> int main() { int b=0,c=0; int j=1; char a[80]; scan

演算法競賽入門經典(第二版)陣列和字串中競賽題目例題3-5 生成元

如果x加上x的各個數字之和得到y,就說x是y的生成元。給出n(1<=n<=100000)求最小生成元。無解輸出0.例如n=216時的解為198 分析 本題看起來是個數學題實則不然。假設所求生成元為m不難發現m<n.換句話說只需列舉所有的m<n看看有沒有哪個數是n的

演算法競賽入門經典(第二版)陣列和字串中競賽題目例題3-4猜數字

實現一個經典猜數字遊戲。給定答案序列和使用者猜的序列,統計有多少數字位置正確A,有多少數字在兩個序列都出現過但位置不對B 輸入包含多組資料。每組第一行為序列長度為n,第二行是答案序列,接下來是若干猜測序列。猜測序列全0時該組資料結束。n=0時輸入結束 [分析] 直接統計可得A,為

演算法競賽入門經典(第二版)陣列和字串中競賽題目選講例題3-3迴文詞

輸入一個字串,判斷它是否為迴文串以及映象串。輸入字串保證不含數字0。所謂迴文串,就是反轉以後和原串相同,如abba和madam。所有映象串,就是左右映象之後和原串相同,如2S和3AIAE。注意,並不是每個字元在映象之後都能得到一個合法字元。在本題中,每個字元的映象如圖3-3所示(空白

演算法競賽入門經典(第二版)陣列和字串中競賽題目選講例題3-2WERTYU

把手放在鍵盤上時,稍不注意就會往右錯一位。這樣,輸入Q會變成輸入W,輸入J會變成輸入K等。 輸入一個錯位後敲出的字串(所有字母均為大寫),輸出打字員本來想打出的句子。輸入保證合法,即一定是錯位之後的字串。例如輸入中不會出現大寫字母A。 #include<stdio.h> ch

演算法競賽入門經典(第二版)陣列和字串中競賽題目選講1

3-1例題tex中的引號 在TeX中,左雙引號是“"”,右雙引號是“"”,輸入一篇包含雙引號的文章你的任務是把它轉換成tex的格式 樣例輸入: “you are smart,” 樣例輸出 “you are smart,” 使用fgetc(fin)可以開啟的檔案f

演算法競賽入門經典(第二版)陣列和字串例題與提示下

程式3-3蛇形填數 在nxn方陣裡填入1,2,……,nxn,要求填成蛇形。 例如,n=4時方陣為: 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 上面方陣中多餘空格只是為了便於觀察規律 可以用int a[max][m

演算法競賽入門經典(第二版)陣列和字串例題與提示上

3.1陣列 程式3-1 逆序輸出 #include<stdio.h> #define max 105 int a[max]; int main() { int x,n=0; while(scanf("%d",&x)==1) {

JAVA基礎-類與物件、抽象類、介面 JAVA基礎第一-初識java JAVA基礎第二-java三大特性:封裝、繼承、多型

 業內經常說的一句話是不要重複造輪子,但是有時候,只有自己造一個輪子了,才會深刻明白什麼樣的輪子適合山路,什麼樣的輪子適合平地! 我將會持續更新java基礎知識,歡迎關注。   往期章節: JAVA基礎第一章-初識java JAVA基礎第二章-java三大特