操作允许权 八进制数
用户可读 00400
用户可写 00200
小组可读 00040
小组可写 00020
其它可读 00004
其它可写 00002
控制命令值
IPC_CREAT 0001000
IPC_EXCL 0002000
例:shmid=shmget(key, size, IPC_CREAT|0640)
创建一个关键字为key,长度为size的共享存储区,该共享存储区允许用户自己进行读
写访问,只允许同组用户进行读访问。
2、shmat( )
共享存储区的附接。从逻辑上将一个共享存储区附接到进程的虚拟地址空间上。
系统调用格式: virtaddr=shmat(shmid,addr,flag)
参数定义: char *shmat(shmid,addr,flag);
int shmid,flag;
char * addr;
其中,shmid是共享存储区的标识符;addr是用户给定的,将共享存储区附接到进程的
虚地址空间,当为0时,表示由操作系统分配一个地址;flag其值为SHM_RDONLY时,表示只
能读;其值为0时,表示可读、可写;其值为SHM_RND(取整)时,表示操作系统在必要时
舍去这个地址。该系统调用的返回值是共享存储区所附接到的进程虚地址viraddr。
3、shmdt( )
把一个共享存储区从指定进程的虚地址空间断开。
系统调用格式: shmdt(addr)
参数定义: int shmdt(addr);
char addr;
其中,addr是要断开连接的虚地址,亦即以前由连接的系统调用shmat( )所返回的虚地
址。调用成功时,返回0值,调用不成功,返回-1。
4、shmctl( )
共享存储区的控制,对其状态信息进行读取和修改。
系统调用格式: shmctl(shmid,cmd,buf)
参数定义: int shmctl(shmid,cmd,buf);
int shmid, cmd;
struct shmid_ds *buf;
其中,buf 是用户缓冲区地址,cmd 是操作命令。命令可分为多种类型:
(1)用于查询有关共享存储区的情况。如其长度、当前连接的进程数、共享区的创
建者标识符等;
(2)用于设置或改变共享存储区的属性。如共享存储区的许可权、当前连接的进程
计数等;
(3)对共享存储区的加锁和解锁命令;