共享記憶體函式原型:
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是各種程序通訊方式的統稱 ...