写2段C++程序,第一个程序是生成动态数据并以共存內享的形式发布,第二个程序是读取第一个程序生成的共享内存
时间: 2023-05-27 08:07:53 浏览: 46
第一个程序:
#include <stdio.h>
#include <stdlib.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <unistd.h>
#define SHMSZ 27
int main()
{
char c;
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 = shmat(shmid, NULL, 0)) == (char *) -1) {
perror("shmat");
exit(1);
}
// 向共享内存写入数据
s = shm;
for (c = 'a'; c <= 'z'; c++)
*s++ = c;
*s = '\0';
// 等待另一个进程读取数据
while (*shm != '*')
sleep(1);
// 分离共享内存
shmdt(shm);
// 删除共享内存
shmctl(shmid, IPC_RMID, NULL);
return 0;
}
第二个程序:
#include <stdio.h>
#include <stdlib.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#define SHMSZ 27
int main()
{
int shmid;
key_t key;
char *shm, *s;
// 生成共享内存的key值
key = 5678;
// 获取共享内存
if ((shmid = shmget(key, SHMSZ, 0666)) < 0) {
perror("shmget");
exit(1);
}
// 将共享内存关联到进程的地址空间
if ((shm = shmat(shmid, NULL, 0)) == (char *) -1) {
perror("shmat");
exit(1);
}
// 从共享内存读取数据并输出
for (s = shm; *s != '\0'; s++)
putchar(*s);
putchar('\n');
// 标记共享内存已被读取
*shm = '*';
// 分离共享内存
shmdt(shm);
return 0;
}
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)