写2段C++程序,第一个程序是生成动态数据并以共存內享的形式发布,第二个程序是读取第一个程序生成的共享内存
时间: 2023-05-27 15:07:04 浏览: 70
程序一:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/shm.h>
#define SHM_SIZE 1024
int main()
{
int shmid;
char *shm_ptr;
// 创建共享内存
shmid = shmget(IPC_PRIVATE, SHM_SIZE, IPC_CREAT | 0666);
if (shmid == -1) {
perror("shmget failed");
exit(1);
}
// 将共享内存映射到进程地址空间
shm_ptr = (char *) shmat(shmid, NULL, 0);
if (shm_ptr == (char *) -1) {
perror("shmat failed");
exit(1);
}
// 生成动态数据并存入共享内存
for (int i = 0; i < SHM_SIZE; i++) {
shm_ptr[i] = rand() % 26 + 'A';
}
// 打印共享内存的地址和键值
printf("共享内存的地址:%p\n", shm_ptr);
printf("共享内存的键值:%d\n", shmid);
// 分离共享内存
if (shmdt(shm_ptr) == -1) {
perror("shmdt failed");
exit(1);
}
return 0;
}
程序二:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/shm.h>
#define SHM_SIZE 1024
int main()
{
int shmid;
char *shm_ptr;
// 获取共享内存的键值
printf("请输入共享内存的键值:");
scanf("%d", &shmid);
// 获取共享内存的地址
shm_ptr = (char *) shmat(shmid, NULL, 0);
if (shm_ptr == (char *) -1) {
perror("shmat failed");
exit(1);
}
// 读取共享内存中的数据并打印
printf("共享内存中的数据:");
for (int i = 0; i < SHM_SIZE; i++) {
putchar(shm_ptr[i]);
}
putchar('\n');
// 分离共享内存
if (shmdt(shm_ptr) == -1) {
perror("shmdt failed");
exit(1);
}
return 0;
}
阅读全文