Linux下往开辟共享内存,并往其中写入8192字节数据的示例代码
时间: 2024-09-14 13:10:00 浏览: 36
在Linux环境下,我们可以使用`shm_open()`函数和`mmap()`函数来创建和操作共享内存。下面是一个简单的C语言示例代码片段,展示了如何创建8192字节的共享内存并写入数据:
```c
#include <sys/types.h>
#include <sys/shm.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#define SHM_SIZE (8192) // 共享内存大小
int main(int argc, char *argv[]) {
key_t shm_key; // 共享内存键值
int shmid; // 共享内存ID
char *shared_mem_addr; // 共享内存地址
mode_t flags = 0644; // 权限设置
off_t offset = 0; // 写入位置
// 创建或打开共享内存
shm_key = ftok("/path/to/your/app", 's'); // 使用文件名作为键值
if ((shmid = shmget(shm_key, SHM_SIZE, flags | IPC_CREAT)) == -1) {
perror("Failed to create shared memory");
return -1;
}
// 获取共享内存的地址
shared_mem_addr = (char*) shmat(shmid, NULL, SHM_RDONLY); // 如果需要写入,则设为SHM_RND或SHM_WRITE
if (shared_mem_addr == (char*) -1) {
perror("Failed to attach to shared memory");
shmctl(shmid, IPC_RMID, NULL); // 移除未使用的共享内存
return -1;
}
// 将数据写入共享内存
if (write(offset, "Hello, Shared Memory!", strlen("Hello, Shared Memory!")) != strlen("Hello, Shared Memory!")) {
perror("Failed to write to shared memory");
shmdt(shared_mem_addr); // 从进程内存中分离共享内存
shmctl(shmid, IPC_RMID, NULL);
return -1;
}
printf("Wrote data to shared memory at address %p\n", shared_mem_addr);
// 离开共享内存
shmdt(shared_mem_addr);
shmctl(shmid, IPC_RMID, NULL);
return 0;
}
阅读全文