【Linux 16】进程间通信的方式 - 共享内存
在Linux中,进程间通信(IPC)的一种方式是使用共享内存。共享内存允许两个或多个进程共享同一块物理内存区域,进程可以直接读写这块内存而不需要进行数据拷贝。
以下是使用共享内存进行进程间通信的基本步骤和示例代码:
- 创建共享内存对象。
- 连接共享内存对象到当前进程的地址空间。
- 映射共享内存到本地地址空间。
- 进行数据读写。
- 解除映射。
- 删除共享内存对象。
示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <string.h>
#define SHM_SIZE 1024
int main() {
int shm_id;
char* shm_addr;
// 创建共享内存
if ((shm_id = shmget(IPC_PRIVATE, SHM_SIZE, 0666)) < 0) {
perror("shmget");
exit(1);
}
// 连接共享内存
if ((shm_addr = (char*)shmat(shm_id, NULL, 0)) < (char*)0) {
perror("shmat");
exit(1);
}
// 写入数据
strcpy(shm_addr, "Hello from shared memory");
// 读取数据
printf("Data in shared memory: %s\n", shm_addr);
// 解除映射
if (shmdt(shm_addr) < 0) {
perror("shmdt");
exit(1);
}
// 删除共享内存对象
if (shmctl(shm_id, IPC_RMID, NULL) < 0) {
perror("shmctl");
exit(1);
}
return 0;
}
这段代码创建了一个共享内存段,然后连接到当前进程并映射到地址空间。接着,它向共享内存写入一个字符串,然后读取并打印这个字符串。最后,它解除映射并删除共享内存对象。
评论已关闭