《共享記憶體》Linux程序間通訊入門

2021-10-04 14:07:33 字數 2225 閱讀 6260

執行

共享記憶體要想好用,共享的那段記憶體,需要用資料結構和佇列組織起來,加上讀寫索引和資料有效標誌(已讀和未讀、可讀)。下面的這個示例**是我初學時的,適合入門和了解使用流程。

寫端**

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define n 1024

typedef

struct

shmbuf;

void

handler

(int signo)

intmain()

signal

(sigusr1, handler);if

((shmid =

shmget

(key,

sizeof

(shmbuf)

,0666

| ipc_creat | ipc_excl))==

-1) peerpid = shmadd-

>pid;

shmadd-

>pid =

getpid()

;kill

(peerpid, sigusr1);}

else

}else

//first process

shmadd-

>pid =

getpid()

;//sprintf(shmadd, "%d", getpid());

pause()

; peerpid = shmadd-

>pid;

}printf

(">");

while(1

)if(shmctl

(shmid, ipc_rmid,

null)==

-1)exit(0

);}pause()

;printf

(">");

}return0;

}

讀取端**
#include

#include

#include

#include

#include

#include

#include

#include

#include

#define n 1024

typedef

struct

shmbuf;

void

handler

(int signo)

intmain()

signal

(sigusr1, handler);if

((shmid =

shmget

(key,

sizeof

(shmbuf)

,0666

| ipc_creat | ipc_excl))==

-1) peerpid = shmadd-

>pid;

shmadd-

>pid =

getpid()

;kill

(peerpid, sigusr1);}

else

}else

//first process

shmadd-

>pid =

getpid()

;pause()

; peerpid = shmadd-

>pid;

}while(1

)exit(0

);}// sleep(1);

usleep

(100000);

kill

(peerpid, sigusr1);}

exit(0);}

編譯

**見:

Linux程序間通訊 共享記憶體

共享記憶體是執行在同一臺機器上的程序間通訊最快的方式,因為資料不需要在不同的程序間複製。通常由乙個程序建立一塊共享記憶體區,其餘程序對這塊記憶體區進行讀寫。共享記憶體往往與其它通訊機制,如訊號量結合使用,來達到程序間的同步及互斥。首先要用的函式是shmget,它獲得乙個共享儲存識別符號。i nclu...

Linux程序間共享記憶體通訊

使用共享記憶體基本分四個步驟 獲得共享記憶體 shmget 對映共享記憶體shmat 解除對映shmdt 刪除共享記憶體shmctl 於是自己在網上找來了乙個例子看了下,並且用虛擬機器單獨跑了下共享記憶體的經典例程看了下,才知道了自己的問題出現 了 發現有時候只要自己親自將程式一步一步的去測,才知道...

Linux程序間通訊 共享記憶體

之前提到了程序間通訊的管道,訊息佇列,訊號量,然後其中訊號量是pv操作,操控的是乙個共享資源。在我們提到的ipc模組中,訊息佇列針對的是資料單元的資訊傳送,管道不屬於system v ipc的部分,所以按照乙個作業系統的整體來說,他應該也有著乙個關於位元組流的訊息傳輸,並且要比之前都要快,還要跟我們...