编写两个程序实现两个进程进行共享内存通信
时间: 2024-09-13 19:18:23 浏览: 41
在Unix/Linux系统中,可以通过System V的共享内存来实现两个进程间的通信。共享内存是最快的IPC(进程间通信)机制,因为它允许两个或多个进程共享一个给定的存储区。以下是使用C语言在Linux环境下创建两个程序来实现进程间共享内存通信的简单例子。
第一个程序:创建共享内存并写入数据
```c
#include <stdio.h>
#include <stdlib.h>
#include <sys/shm.h>
#include <sys/stat.h>
#include <unistd.h>
#define SHM_SIZE 1024
int main() {
int shm_id;
key_t key = 1234; // 这是共享内存的键值
// 创建共享内存段
shm_id = shmget(key, SHM_SIZE, IPC_CREAT | 0666);
if (shm_id == -1) {
perror("shmget failed");
exit(1);
}
// 将共享内存附加到当前进程的地址空间
char *str = (char*)shmat(shm_id, NULL, 0);
if (str == (char*)-1) {
perror("shmat failed");
exit(1);
}
// 写数据到共享内存
sprintf(str, "Hello, World!");
// 分离共享内存
shmdt(str);
return 0;
}
```
第二个程序:读取共享内存中的数据
```c
#include <stdio.h>
#include <stdlib.h>
#include <sys/shm.h>
#include <sys/stat.h>
#include <unistd.h>
#define SHM_SIZE 1024
int main() {
int shm_id;
key_t key = 1234; // 使用相同的键值
// 获取共享内存段
shm_id = shmget(key, SHM_SIZE, 0);
if (shm_id == -1) {
perror("shmget failed");
exit(1);
}
// 将共享内存附加到当前进程的地址空间
char *str = (char*)shmat(shm_id, NULL, 0);
if (str == (char*)-1) {
perror("shmat failed");
exit(1);
}
// 打印共享内存中的数据
printf("Shared memory data: %s\n", str);
// 分离共享内存
shmdt(str);
// 删除共享内存段
shmctl(shm_id, IPC_RMID, NULL);
return 0;
}
```
在这两个程序中,第一个程序创建了一个共享内存段,写入了一条消息,然后分离了共享内存。第二个程序附加到了同一个共享内存段,读取了消息,并在完成后删除了共享内存。
阅读全文