Linux應用開發之程序間通訊 共享記憶體

2021-09-26 01:16:33 字數 1240 閱讀 8628

共享記憶體函式原型:

void* mmap(void*addr,size_t length,int prot,int flags,int fd,off_t offset);

第乙個引數addr:一般為null

第二個引數length:需要申請的空間長度

第三個引數prot:prot_read , prot_write,prot_exec,prot_none

prot_exec表示對映的這一段可執行,例如對映共享庫

prot_read表示對映的這一段可讀

prot_write表示對映的這一段可寫

prot_none表示對映的這一段不可訪問

第四個引數flags:map_shared , map_private來設定檔案是共享的還是私有的

第五個引數fd:想要共享的檔案描述符

第六個引數offset:一般為0

通過乙個例項來具體看一下這個函式的使用

//讀**

#include#include#include#include#include#includestruct stu

;int main()

addr = mmap(null,100,prot_read|prot_write,map_shared,fd,0);

close(fd);

unlink("hello");//共享以後刪除建立的函式

while(1)

munmap(addr,100);//取消共享

return 0;

}//寫**

#include#include#include#include#include#includestruct stu

;int main()

//增加新建立檔案的大小,必須要進行一次write操作lseek才會生效

lseek(fd,99,seek_set);

write(fd," ",1);

addr = mmap(null,100,prot_read | prot_write,map_shared,fd,0);

close(fd);

while(1)

munmap(addr,100);

return 0;

}

執行結果:

讓寫程序在後台不停的進行+1的操作,讀程序不停的進行讀取。

linux程序間通訊之管道通訊

一 命名管道通訊 管道通訊分為 無名管道和有名管道 無名管道是用於父子孫程序,之間有血緣關係 有名管道 用於任意兩個程序 無名管道 1 建立 int pipe int filedis 2 它會建立兩個檔案描述符 filedis 0 用於讀管道 filedis 1 用於寫管道 通常先建立乙個管道,再通...

linux程序間通訊之管道

下面幾節,將分別溫習下linux程序進通訊的幾種機制1 管道 管道是比較古老的程序間的通訊方式。主要有有名管道和無名管道兩種。2 無名管道 它的特點就是 1 只能使用在具有親緣關係的程序之間的通訊 父子程序或者兄弟程序之間 因為只有具有親緣關係的程序才能繼承其建立的檔案描述符。2 是乙個半雙工的通訊...

Linux程序間通訊之管道

管道,你可以把它想成一根資料線,連線了兩個程序,使他們可以互相通訊。更嚴謹來說,它是乙個檔案或者一塊共享區,乙個程序往裡面寫資料,另乙個程序從裡面拿資料,以此種方式完成程序間通訊。管道是unix系統ipc最古老的形式,所有的unix系統都提供此種通訊機制 unix系統ipc是各種程序通訊方式的統稱 ...