總結本篇主要是本小白對linux 有名管道一些筆記,希望對一同學習linux的夥伴有所幫助。
如有發現錯誤,歡迎指出,一同進步!
示例:共享記憶體能夠很容易控制容量,速度快,但要保持同步,比如乙個程序在寫的時候,另乙個程序要注意讀寫的問題,相當於執行緒中的執行緒安全,當然,共享記憶體區同樣可以用作執行緒間通訊,不過沒這個必要,執行緒間本來就已經共享了同一程序內的一塊記憶體。
主函式**如下:
#include
// 建立或獲取乙個共享記憶體:成功返回共享記憶體id,失敗返回-1
intshmget
(key_t key, size_t size,
int flag)
;void
*shmat
(int shm_id,
const
void
*addr,
int flag)
;int
shmdt
(void
*addr)
;// 斷開與共享記憶體的連線:成功返回0,失敗返回-1
intshmctl
(int shm_id,
int cmd,
struct shmid_ds *buf)
//銷毀該共享記憶體
(ipcs -m 檢視所有共享記憶體
ipcrm -m +共享記憶體id號 刪除該共享記憶體)
**如下(示例):
必須使用 shmat 函式連線該共享記憶體到當前程序的位址空間,連線成功後把共享記憶體區物件對映到呼叫程序的位址空間,隨後可像本地空間一樣訪問。
//寫程式
#include
#include
#include
#include
#include
//int shmget(key_t key, size_t size, int shm***);
//void *shmat(int shmid, const void *shmaddr, int shm***);
//int shmdt(const void *shmaddr);
//int shmctl(int shmid, int cmd, struct shmid_ds *buf);
intmain()
//讀程式
#include
#include
#include
#include
#include
//int shmget(key_t key, size_t size, int shm***);
//void *shmat(int shmid, const void *shmaddr, int shm***);
//int shmdt(const void *shmaddr);
//int shmctl(int shmid, int cmd, struct shmid_ds *buf);
intmain()
共享記憶體就是對映一段能被其他程序所訪問的記憶體,這段共享記憶體由乙個程序建立,建立一次即可,但多個程序都可以訪問。
Linux 共享記憶體
一 概念 共享記憶體是被多個程序共享的一部分物理記憶體,是程序間共享資料的最快的一種方法。二 實現 分為兩個步驟 1 建立共享記憶體。2 對映共享記憶體。1 建立 int shmget key t key,int size,int shm 當key的取值為 ipc private 時,將建立一塊新的...
linux共享記憶體
linux共享記憶體使用 標頭檔案 include 1 建立共享記憶體 int shmget key t key,size t size,int shm 建立成功以後會返回乙個共享記憶體id,建立失敗返回 1。2 獲取共享記憶體 void shmat int shmid,const void shm...
linux 共享記憶體
共享記憶體解決的問題是 任意兩個程序之間的通訊如果是有名管道,是沒有辦法對管道中間的資料獲取讀和寫操作的,只能是兩段的資料,那麼如何對所有的資料進行操作 共享記憶體 共享記憶體也是通過核心來完成 命令 ipcs m p s 共享記憶體的工作機制如下所示 首先linux系統執行的每乙個程式,都是乙個程...