如果是父子关系的进程间通信 是这块共享内存的标识符。 的话,这个标识符用IPC_PRIVATE来代替。如不是,可用 来代替。 的话,这个标识符用 来代替 如不是,可用fork()算出来 算出来 一个标识符使用。 一个标识符使用。 int shmsiz 是这块内存的大小. 是这块内存的大小. int flag 是这块内存的模式 是这块内存的模式(mode)以及权限标识。 以及权限标识。 以及权限标识 模式可取如下值: 模式可取如下值: 新建: 新建:IPC_CREAT; ; 使用已开辟的内存: 使用已开辟的内存:IPC_ALLOC; ; 如果标识符以存在,则返回错误值: 如果标识符以存在,则返回错误值:IPC_EXCL 然后将“模式” 权限标识”进行“ 运算, 然后将“模式” 和“权限标识”进行“或”运算, 做为第三个参数。 做为第三个参数。 如: IPC_CREAT | 0666 返回值:这个函数成功时返回共享内存的ID, 返回值:这个函数成功时返回共享内存的 ,失败 时返回-1。 时返回 。 例子: 例子:shmid开辟共享内存 开辟共享内存 shmid = shmget( shmkey , sizeof(in_data) , IPC_CREAT | 0666 ) ; (2)void *shmat( int shmid , char ) *shmaddr , int shmflag ); 作用: 作用:shmat( )是用来允许本进程访问一块共享内 是用来允许本进程访问一块共享内 存的函数。 存的函数。 参数定义: 参数定义: int shmid是那块共享内存的 。 是那块共享内存的ID。 是那块共享内存的 char *shmaddr是共享内存的起始地址 是共享内存的起始地址 int shmflag是本进程对该内存的操作模式。如 是本进程对该内存的操作模式。 是本进程对该内存的操作模式 果 是SHM_RDONLY的话,就是只读模式。其它 的话,就是只读模式。 的话 的是读写模式 返回值:成功时, 返回值:成功时,这个函数返回共享内存的起始地 失败时返回-1。 址。失败时返回 。 (3)int shmdt( char *shmaddr ); ) 作用: 相反, 作用:shmdt()与shmat()相反,是用来禁止 与 相反 本进程访问一块共享内存的函数。 本进程访问一块共享内存的函数。 参数定义: 参数定义:char *shmaddr是那块共享内存的 是那块共享内存的 起始地址。 起始地址。 返回值:成功时返回0。失败时返回-1。 返回值:成功时返回 。失败时返回 。 (4)int shmctl( int shmid , int cmd , struct ) shmid_ds *buf ); 作用: 实现对共享内存区域的控制操作。 作用:shmctl实现对共享内存区域的控制操作。 实现对共享内存区域的控制操作 函数参数定义: 函数参数定义: int shmid是共享内存的 。 是共享内存的ID。 是共享内存的 int cmd是控制命令,可取值如下: