c语言写一个高级共享内存的使用
时间: 2023-09-06 18:11:51 浏览: 83
共享内存 C代码
5星 · 资源好评率100%
要使用高级共享内存,可以使用POSIX共享内存。以下是一个简单的示例程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <string.h>
#define SHM_NAME "/myshm"
#define SHM_SIZE 1024
int main(int argc, char *argv[]) {
int fd = shm_open(SHM_NAME, O_CREAT | O_RDWR, 0666);
if (fd == -1) {
perror("shm_open error");
exit(EXIT_FAILURE);
}
if (ftruncate(fd, SHM_SIZE) == -1) {
perror("ftruncate error");
exit(EXIT_FAILURE);
}
void *addr = mmap(NULL, SHM_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if (addr == MAP_FAILED) {
perror("mmap error");
exit(EXIT_FAILURE);
}
close(fd);
pid_t pid = fork();
if (pid == -1) {
perror("fork error");
exit(EXIT_FAILURE);
}
if (pid == 0) { // Child process
char *msg = "Hello, parent!";
strncpy(addr, msg, strlen(msg));
exit(EXIT_SUCCESS);
} else { // Parent process
wait(NULL);
printf("Message from child: %s\n", (char *) addr);
}
if (munmap(addr, SHM_SIZE) == -1) {
perror("munmap error");
exit(EXIT_FAILURE);
}
if (shm_unlink(SHM_NAME) == -1) {
perror("shm_unlink error");
exit(EXIT_FAILURE);
}
return 0;
}
```
该程序创建一个名为“/myshm”的POSIX共享内存,大小为1024字节。它使用“shm_open”函数打开共享内存对象,并使用“ftruncate”函数将其大小设置为1024字节。然后,它使用“mmap”函数将共享内存映射到当前进程的地址空间中。
在此之后,程序创建了一个子进程,子进程将一个字符串复制到共享内存中。父进程等待子进程结束后从共享内存中读取数据并打印。
最后,程序使用“munmap”函数取消映射共享内存,并使用“shm_unlink”函数从系统中删除共享内存对象。
阅读全文