共享内存的创建步骤及其示例代码
时间: 2023-08-18 11:04:02 浏览: 45
共享内存的创建步骤已经在上一个回答中介绍过了,这里给出一个简单的示例代码来说明如何创建和使用共享内存。
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/shm.h>
#define SHM_SIZE 1024
int main() {
int shmid;
char *data;
int pid;
// 创建共享内存
shmid = shmget(IPC_PRIVATE, SHM_SIZE, IPC_CREAT|0666);
if (shmid < 0) {
perror("shmget");
exit(1);
}
// 映射共享内存
data = (char *) shmat(shmid, NULL, 0);
if (data == (char *) -1) {
perror("shmat");
exit(1);
}
// 在共享内存中写入数据
sprintf(data, "Hello, world!");
// 创建子进程
pid = fork();
if (pid < 0) {
perror("fork");
exit(1);
} else if (pid == 0) {
// 子进程读取共享内存中的数据
printf("Child process read: %s\n", data);
// 分离共享内存
if (shmdt(data) < 0) {
perror("shmdt");
exit(1);
}
} else {
// 等待子进程结束
waitpid(pid, NULL, 0);
// 分离共享内存
if (shmdt(data) < 0) {
perror("shmdt");
exit(1);
}
// 删除共享内存
if (shmctl(shmid, IPC_RMID, NULL) < 0) {
perror("shmctl");
exit(1);
}
}
return 0;
}
```
在上面的示例代码中,我们首先使用 `shmget` 函数创建一个共享内存标识符,并指定了共享内存的大小。然后使用 `shmat` 函数将共享内存映射到当前进程的地址空间中,并在共享内存中写入了一些数据。接着创建了一个子进程,在子进程中读取了共享内存中的数据,然后使用 `shmdt` 函数将共享内存从当前进程的地址空间中分离。在主进程中,我们等待子进程结束,然后使用 `shmdt` 函数将共享内存从当前进程的地址空间中分离,并使用 `shmctl` 函数删除共享内存标识符。