C++中可以使用System V共享內存和POSIX共享內存來實現共享內存。
首先,需要包含<sys/ipc.h>和<sys/shm.h>頭文件。
調用shmget()
函數創建或獲取共享內存標識符。
調用shmat()
函數將共享內存連接到當前進程的地址空間。
使用共享內存進行讀寫操作。
調用shmdt()
函數將共享內存與當前進程分離。
調用shmctl()
函數刪除共享內存。
首先,需要包含<fcntl.h>和<sys/mman.h>頭文件。
調用shm_open()
函數創建或獲取共享內存對象。
使用ftruncate()
函數設置共享內存對象的大小。
調用mmap()
函數將共享內存對象映射到進程的地址空間。
使用共享內存進行讀寫操作。
調用munmap()
函數解除共享內存對象的映射。
調用shm_unlink()
函數刪除共享內存對象。
以下是使用System V共享內存的示例代碼:
#include <iostream>
#include <sys/ipc.h>
#include <sys/shm.h>
int main() {
key_t key = ftok("shared_memory", 1234); // 生成共享內存的key
int shm_id = shmget(key, 1024, IPC_CREAT | 0666); // 創建共享內存段
char* shm_addr = (char*)shmat(shm_id, nullptr, 0); // 連接共享內存
// 寫入數據到共享內存
strcpy(shm_addr, "Hello, shared memory!");
// 從共享內存讀取數據
std::cout << "Message from shared memory: " << shm_addr << std::endl;
shmdt(shm_addr); // 分離共享內存
shmctl(shm_id, IPC_RMID, nullptr); // 刪除共享內存段
return 0;
}
注意:使用共享內存時需要確保不同進程之間對共享內存的讀寫操作的同步和互斥,以避免數據不一致的問題。