使用共享存储区来实现两个进程之间的进程通信 进程 A 创建一个长度为 512 字节的共享内存,并显示写入该共享内存的数据;进程 B 将共享内存附加到自己的地址空间,并向共享内存中写入数据。
时间: 2024-05-02 09:20:22 浏览: 82
以下是使用共享内存实现进程间通信的示例代码:
进程 A:
```c
#include <stdio.h>
#include <stdlib.h>
#include <sys/shm.h>
#define SHM_KEY 1234
#define SHM_SIZE 512
int main()
{
int shmid;
char *shm_ptr;
shmid = shmget(SHM_KEY, SHM_SIZE, IPC_CREAT | 0666); // 创建共享内存
if (shmid == -1) {
perror("shmget");
exit(1);
}
shm_ptr = shmat(shmid, NULL, 0); // 将共享内存附加到进程 A 的地址空间
if (shm_ptr == (char*)-1) {
perror("shmat");
exit(1);
}
// 向共享内存中写入数据
sprintf(shm_ptr, "Hello, Process B!");
printf("Process A wrote to shared memory: %s\n", shm_ptr);
shmdt(shm_ptr); // 分离共享内存
return 0;
}
```
进程 B:
```c
#include <stdio.h>
#include <stdlib.h>
#include <sys/shm.h>
#define SHM_KEY 1234
#define SHM_SIZE 512
int main()
{
int shmid;
char *shm_ptr;
shmid = shmget(SHM_KEY, SHM_SIZE, 0666); // 获取共享内存
if (shmid == -1) {
perror("shmget");
exit(1);
}
shm_ptr = shmat(shmid, NULL, 0); // 将共享内存附加到进程 B 的地址空间
if (shm_ptr == (char*)-1) {
perror("shmat");
exit(1);
}
// 向共享内存中写入数据
sprintf(shm_ptr, "Hello, Process A!");
printf("Process B wrote to shared memory: %s\n", shm_ptr);
shmdt(shm_ptr); // 分离共享内存
return 0;
}
```
在上述代码中,进程 A 和进程 B 都通过 `shmget` 函数获取了同一个共享内存。进程 A 将共享内存附加到自己的地址空间,并向其中写入了数据,进程 B 同样将共享内存附加到自己的地址空间,并向其中写入了数据。可以看到,两个进程通过共享内存实现了数据的交换。
阅读全文