IPC程序間的通訊(下篇)共享記憶體和訊號量

2021-10-06 19:42:40 字數 2096 閱讀 6146

共享記憶體的簡單呼叫一般是

鍵值的建立

shmget函式建立共享記憶體空間

shmat函式獲取第乙個可用共享記憶體空間的位址

shmdt函式進行分離(對共享儲存段操作結束時的步驟,並不是從系統中刪除共享記憶體和結構)

shmctl函式進行刪除共享儲存空間

我們就可以根據這五個步驟簡單的編寫乙個寫入的**和讀取的**。

寫入的**:

1 #include 

2 #include

3 #include

4 #include

5 #include

6int

main()

717 shmadd =

shmat

(shmid,0,

0);18

printf

("shmat ok\n");

19strcpy

(shmadd,

"this is test");

20sleep(5

);21shmdt

(shmadd);22

shmctl

(shmid,ipc_rmid,0)

;23return0;

24}

讀取的**

1 #include 

2 #include

3 #include

4 #include

5 #include

6int

main()

717 shmadd =

shmat

(shmid,0,

0);18

printf

("shmat ok\n");

19printf

("msg:%s\n"

,shmadd);20

shmdt

(shmadd);21

shmctl

(shmid,ipc_rmid,0)

;22return0;

23}

在寫入的**裡,我們要先建立乙個鍵值 key_t key,然後使用shmget函式來建立共享記憶體,許可權是可讀可寫。

然後獲取共享記憶體空間第乙個位址,shmat函式來實現,我們要先定義乙個字元型的指標,shmat的返回值給到這個指標上。

在用strcpy函式,把內容的位址傳到指標上,這樣就完成共享記憶體的寫入了。

後面就是分離和關閉共享記憶體了。

在讀取的**裡,就更簡單了,與寫入**不用的是,我們不需要strcpy函式,我們只要開啟共享記憶體,獲取共享記憶體第乙個位址,就能直接讀取出來,**裡是直接列印出來。

我們平常在程序執行的時候,有時候會退不出來,像如果有乙個while(1)函式,在主函式裡,這個程式就會一直迴圈,這個時候我們按下ctrl+c就能終止執行。這個就是訊號的使用,可以使用signal函式,就可以知道這個函式的值,並且在收到訊號的時候就會列印出來。我們也使用kill -9 ***xx,來殺死程序,這個訊號是不可忽略的。

我們可以利用訊號來傳遞資訊:

接收端的**:

1 #include 

2 #include 34

// int sigaction(int signum, const struct sigaction *act,

5// struct sigaction *oldact);

6void

handler

(int signum,siginfo_t *info,

void

*context)713

}1415int main ()16

~

寫入端的**:

1 #include 

2 #include

3// int sigqueue(pid_t pid, int sig, const union si**al value);

4int

main

(int argc,

char

**ar**)

5~

程序間通訊IPC 共享記憶體

共享記憶體 共享記憶體 就是開闢一段物理記憶體使多個程序共享 是程序間最高效的傳輸方式 共享記憶體必須結合其他方式來實現程序間的同步 程式設計步驟 1 開闢一段共享記憶體 int shmget key t key,size t size,int shm key t key ftok a stat s...

IPC程序間通訊(共享記憶體)

共享記憶體區是最快的ipc形式。一旦這樣的記憶體對映到共享它的程序的位址空間,這些程序間資料傳遞不再涉及到核心,換句話說是程序不再通過執行進入核心的系統呼叫來傳遞彼此的資料。用管道或者訊息佇列傳遞資料,核心為每個ipc物件維護乙個資料結構 用共享記憶體傳遞資料 struct shmid ds inc...

程序間通訊(IPC) 共享記憶體

共享記憶體是被多個程序共享的一部分物理記憶體。共享記憶體是程序間共享資料的一種最快的方法,乙個程序向共享記憶體區域寫入了資料,共享這個記憶體區域的所有程序就可以立刻看到其中的內容。把物理記憶體按要求申請出來給多個程序使用,共享記憶體訪問起來比較快,用起來比較簡單,不需要一些特別的函式。共享記憶體實現...