C++ 实现进程通信进程之间进行数据共享,并使用共享内存作为通信机制,给出完整代码
时间: 2024-01-24 15:04:55 浏览: 136
通过共享内存实现多进程间的通信,共享数据
5星 · 资源好评率100%
以下是使用共享内存作为通信机制实现进程间数据共享的完整C++代码示例:
```c++
#include <sys/ipc.h>
#include <sys/shm.h>
#include <iostream>
#include <cstring>
using namespace std;
#define SHMSZ 27
int main()
{
int shmid;
key_t key;
char *shm, *s;
// 生成key值
key = 5678;
// 创建共享内存
if ((shmid = shmget(key, SHMSZ, IPC_CREAT | 0666)) < 0) {
perror("shmget");
exit(1);
}
// 连接共享内存
if ((shm = (char *)shmat(shmid, NULL, 0)) == (char *) -1) {
perror("shmat");
exit(1);
}
// 写入共享内存
s = shm;
for (char c = 'a'; c <= 'z'; c++) {
*s++ = c;
}
*s = '\0';
// 读取共享内存并输出
for (s = shm; *s != '\0'; s++) {
cout << *s;
}
cout << endl;
// 分离共享内存
shmdt(shm);
// 删除共享内存
shmctl(shmid, IPC_RMID, NULL);
return 0;
}
```
在上述示例中,我们使用了Linux系统的IPC(Inter-Process Communication)机制中的共享内存实现了进程间的数据共享。在程序中,我们首先通过shmget函数创建了一块共享内存区域,并指定了一个唯一的标识符key。接着,我们通过shmat函数将当前进程连接到共享内存区域,并使用指针的方式访问共享内存区域中的数据。在本例中,我们将a到z的字符写入共享内存,并通过循环读取并输出了共享内存中的数据。最后,我们通过shmdt函数将当前进程与共享内存区域分离,并通过shmctl函数删除了共享内存区域。
阅读全文