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