linux c之使用共享内存实现进程间通信
這篇博客有別人的也有自己改的,作為讀書(shū)筆記,勿噴。
1、共享內(nèi)存的介紹
共享內(nèi)存就是允許兩個(gè)不相關(guān)的進(jìn)程訪問(wèn)同一個(gè)邏輯內(nèi)存。共享內(nèi)存是在兩個(gè)正在運(yùn)行的進(jìn)程之間共享和傳遞數(shù)據(jù)的一種非常有效的方式。不同進(jìn)程之間共享的內(nèi)存通常安排為同一段物理內(nèi)存。進(jìn)程可以將同一段共享內(nèi)存連接到它們自己的地址空間中,所有進(jìn)程都可以訪問(wèn)共享內(nèi)存中的地址,就好像它們是由用C語(yǔ)言函數(shù)malloc分配的內(nèi)存一樣。而如果某個(gè)進(jìn)程向共享內(nèi)存寫入數(shù)據(jù),所做的改動(dòng)將立即影響到可以訪問(wèn)同一段共享內(nèi)存的任何其他進(jìn)程。
特別提醒:共享內(nèi)存并未提供同步機(jī)制,也就是說(shuō),在第一個(gè)進(jìn)程結(jié)束對(duì)共享內(nèi)存的寫操作之前,并無(wú)自動(dòng)機(jī)制可以阻止第二個(gè)進(jìn)程開(kāi)始對(duì)它進(jìn)行讀取。所以我們通常需要用其他的機(jī)制來(lái)同步對(duì)共享內(nèi)存的訪問(wèn)
2、共享內(nèi)存的常用api介紹
頭文件 sys/shm.h中
1、shmget函數(shù)
該函數(shù)用來(lái)創(chuàng)建共享內(nèi)存
int shmget(key_t key, size_t size, int shmflg);
第一個(gè)參數(shù),與信號(hào)量的semget函數(shù)一樣,程序需要提供一個(gè)參數(shù)key(非0整數(shù)),它有效地為共享內(nèi)存段命名,shmget函數(shù)成功時(shí)返回一個(gè)與key相關(guān)的共享內(nèi)存標(biāo)識(shí)符(非負(fù)整數(shù)),用于后續(xù)的共享內(nèi)存函數(shù)。調(diào)用失敗返回-1.
不相關(guān)的進(jìn)程可以通過(guò)該函數(shù)的返回值訪問(wèn)同一共享內(nèi)存,它代表程序可能要使用的某個(gè)資源,程序?qū)λ泄蚕韮?nèi)存的訪問(wèn)都是間接的,程序先通過(guò)調(diào)用shmget函數(shù)并提供一個(gè)鍵,再由系統(tǒng)生成一個(gè)相應(yīng)的共享內(nèi)存標(biāo)識(shí)符(shmget函數(shù)
總結(jié)
以上是生活随笔為你收集整理的linux c之使用共享内存实现进程间通信的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux c之解决使用socket函数
- 下一篇: linux网络编程之地址结构sockad