使用共享存储区来实现两个进程之间的进程通信 进程 A :创建一个长度为 512 字节的共享内存,并显示写入该共享内存的数据; 进程 B: 将共享内存附加到自己的地址空间,并向共享内存中写入数据。写出代码
时间: 2024-05-15 20:17:23 浏览: 169
采用共享内存实现进程通信
3星 · 编辑精心推荐
很高兴回答这个问题。以下是实现两个进程之间的进程通信,使用共享存储区的代码:
进程 A:
```c
#include <stdio.h>
#include <stdlib.h>
#include <sys/shm.h>
#include <unistd.h>
int main() {
int shmid;
char* shared_memory;
char buffer[512];
// 创建共享内存段
shmid = shmget(IPC_PRIVATE, 512, IPC_CREAT | 0666);
if (shmid < 0) {
perror("shmget");
exit(1);
}
// 将共享内存段连接到进程的地址空间
shared_memory = (char*)shmat(shmid, NULL, 0);
if (shared_memory == (char*)-1) {
perror("shmat");
exit(1);
}
// 写入数据到共享内存段
printf("请输入要写入共享内存的数据:");
fgets(buffer, 512, stdin);
sprintf(shared_memory, "%s", buffer);
// 打印共享内存中的数据
printf("共享内存中的数据为:%s\n", shared_memory);
// 解除内存连接
if (shmdt(shared_memory) == -1) {
perror("shmdt");
exit(1);
}
// 删除共享内存段
if (shmctl(shmid, IPC_RMID, NULL) == -1) {
perror("shmctl");
exit(1);
}
return 0;
}
```
进程 B:
```c
#include <stdio.h>
#include <stdlib.h>
#include <sys/shm.h>
int main() {
int shmid;
char* shared_memory;
// 连接到共享内存段
shmid = shmget(IPC_PRIVATE, 512, IPC_CREAT | 0666);
if (shmid < 0) {
perror("shmget");
exit(1);
}
shared_memory = (char*)shmat(shmid, NULL, 0);
if (shared_memory == (char*)-1) {
perror("shmat");
exit(1);
}
// 写入数据到共享内存段
sprintf(shared_memory, "%s", "这是进程 B 写入的数据");
// 打印共享内存中的数据
printf("共享内存中的数据为:%s\n", shared_memory);
// 解除内存连接
if (shmdt(shared_memory) == -1) {
perror("shmdt");
exit(1);
}
return 0;
}
```
阅读全文