#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define BUFFER_SIZE 1024
int main() {
key_t key;
int shmid;
char *data;
// 生成一个唯一的key值,用于标识共享内存段
key = ftok("shmfile", 65);
// 创建共享内存段
shmid = shmget(key, BUFFER_SIZE, 0666|IPC_CREAT);
if (shmid == -1) {
fprintf(stderr, "shmget failed\n");
exit(EXIT_FAILURE);
}
// 将共享内存段连接到当前进程的地址空间
data = shmat(shmid, (void *)0, 0);
if (data == (char *)(-1)) {
fprintf(stderr, "shmat failed\n");
exit(EXIT_FAILURE);
}
// 写入数据到共享内存段
strcpy(data, "Hello, Shared Memory!");
printf("Data written to shared memory: %s\n", data);
// 断开共享内存段与当前进程的连接
if (shmdt(data) == -1) {
fprintf(stderr, "shmdt failed\n");
exit(EXIT_FAILURE);
}
// 删除共享内存段
if (shmctl(shmid, IPC_RMID, NULL) == -1) {
fprintf(stderr, "shmctl(IPC_RMID) failed\n");
exit(EXIT_FAILURE);
}
return 0;
}
生成唯一键值:
ftok
函数生成一个唯一的键值(key
),该键值用于标识共享内存段。ftok
的参数是一个文件路径和一个项目 ID。创建共享内存段:
shmget
函数创建一个共享内存段,并返回一个共享内存标识符(shmid
)。BUFFER_SIZE
是共享内存段的大小,0666 | IPC_CREAT
设置了权限并创建新的共享内存段。连接共享内存段:
shmat
函数将共享内存段连接到当前进程的地址空间,并返回指向共享内存段的指针(data
)。写入数据:
strcpy
函数将字符串 "Hello, Shared Memory!"
写入共享内存段中。断开连接:
shmdt
函数断开共享内存段与当前进程的连接。删除共享内存段:
shmctl
函数删除共享内存段,确保资源被正确释放。这段代码展示了如何在 Linux 系统中创建、写入和删除共享内存段。
上一篇:linux gz 解压
下一篇:linux $?
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站