LINUX下的嵌入式C共享内存函数API

函数名

shmget

头文件

#include
#include

函数原型

int shmget(key_t key, size_t size, int shmflg);

函数功能

得到一个共享内存标识符或创建一个共享内存对象并返回共享内存标识符。

参数说明

1.key:0(IPC_PRIVATE):会建立新共享内存对象;大于0的32位整数;视参数shmflg来确定操作。通常要求此值来源于ftok返回的IPC键值。
2.size:大于0的整数:新建的共享内存大小,以字节为单位;0:指获取共享内存时指定为0。
3.shmflag:0,共享内存标识符,若不存在则函数会报错;
IPC_CREAT:当shmflg&IPC_CREAT为真时,如果内核中不存在键值与key相等的共享内存,则新建一个共享内存;如果存在这样的共享内存,返回此共享内存的标识符;
IPC_CREAT|IPC_EXCL:如果内核中不存在键值与key相等的共享内存,则新建一个共享内存;如果存在这样的共享内存则报错。
使用时需要与IPC对象存取权限(如0600)进行|运算来确定信号量集的存取权限。

函数返回值

成功:返回共享内存的标识符;失败:返回-1,错误原因存于error中。

函数名

shmat

头文件

#include
#include

函数原型

void *shmat(int shmid, const void *shmaddr, int shmflg);

函数功能

连接共享内存标识符为shmid的共享内存,连接成功后把共享内存区对象映射到调用进程的地址空间,随后可像访问本地空间一样访问它。

参数说明

1.shmid:共享内存标识符;
2.shmaddr:指定共享内存出现在进程内存地址的什么位置,直接指定为NULL让内核自己决定一个合适的地址位置;
3.shmflg:SHM_RDONLY:为只读模式,其他为读写模式。可以直接写0。

函数返回值

成功:附加好的共享内存地址;出错:返回-1,错误原因存于error中。

函数名

shmdt

头文件

#include
#include

函数原型

int shmdt(const void *shmaddr);

函数功能

与shmat函数相反,是用来断开与共享内存附加点的地址,禁止本进程访问此片共享内存,本函数调用并不删除所指定的共享内存区,而只是将先前用shmat函数连接(attach)好的共享内存脱离(detach)目前的进程。

参数说明

1.shmaddr:连接的共享内存的起始地址。

函数返回值

成功:返回0;出错:返回-1,错误原因存于error中。

函数名

shmctl

头文件

#include
#include

函数原型

int shmctl(int shmid, int cmd, struct shmid_ds *buf);

函数功能

完成对共享内存的控制。

参数说明

1.shmid:共享内存标识符;
2.cmd: 
IPC_STAT:得到共享内存的状态,把共享内存的shmid_ds结构复制到buf中;
IPC_SET:改变共享内存的状态,把buf所指的shmid_ds结构中的uid、gid、mode复制到共享内存的shmid_ds结构内;
IPC_RMID:删除这片共享内存。
3.buf:共享内存管理结构体。具体说明参见共享内存内核结构定义部分。

函数返回值

成功:返回0;出错:返回-1,错误原因存于error中。

你可能感兴趣的:(linux,c语言)