shmget
函数主要参数及其作用:
key_t key
:用于标识共享内存段的键值。它可以是一个任意的整数值,但通常使用ftok
函数生成。这个键值在系统范围内唯一标识一个共享内存段,不同进程可以通过相同的键值来访问同一个共享内存段。
size_t size
:指定共享内存段的大小,以字节为单位。
int shmflg
:共享内存的标志位。它可以是一些位掩码的组合,常见的如IPC_CREAT
(如果共享内存段不存在则创建它)、IPC_EXCL
(与IPC_CREAT
一起使用,若共享内存段已存在则出错),还可以指定访问权限,如0666
表示可读可写权限。
- 创建大小为1024字节共享内存段的简单代码:
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>
#define SHM_SIZE 1024
int main() {
key_t key;
int shmid;
// 使用ftok生成一个键值
key = ftok(".", 'a');
if (key == -1) {
perror("ftok");
return 1;
}
// 创建共享内存段
shmid = shmget(key, SHM_SIZE, IPC_CREAT | 0666);
if (shmid == -1) {
perror("shmget");
return 1;
}
printf("共享内存段创建成功,ID为: %d\n", shmid);
// 可以在这里进行其他操作,如将共享内存段附加到进程地址空间等
// 最后删除共享内存段(这里只是示例,实际应用可能在合适的地方删除)
if (shmctl(shmid, IPC_RMID, NULL) == -1) {
perror("shmctl IPC_RMID");
return 1;
}
return 0;
}