next up previous contents
下一个: 系统调用: shmdt() 上一级: 6.4.4 共享内存 上一个: 系统调用: shmat()

系统调用: shmctl()


  SYSTEM CALL: shmctl();
  PROTOTYPE: int shmctl ( int shmqid, int cmd, struct shmid_ds *buf );
    RETURNS: 0 on success
             -1 on error: errno = EACCES (No read permission and cmd is IPC_STAT)
                                  EFAULT (Address pointed to by buf is invalid with IPC_SET and
                                          IPC_STAT commands)
                                  EIDRM  (Segment was removed during retrieval)
                                  EINVAL (shmqid invalid)
                                  EPERM  (IPC_SET or IPC_RMID command was issued, but
                                          calling process does not have write (alter)
                                          access to the segment)
      NOTES:

这个特定的调用直接模仿了消息队列的 msgctl 调用。 鉴于这个事实,我们不会过多地讨论它。 有效的命令值如下:

IPC_STAT

检索段的 shmid_ds 结构,并将其存储在 buf 参数的地址中

IPC_SET

设置段的 shmid_ds 结构的 ipc_perm 成员的值。 从 buf 参数获取这些值。

IPC_RMID

标记一个段以便删除。

IPC_RMID 命令实际上并没有从内核中删除一个段。 而是,它标记该段以便删除。 实际删除发生在最后一个当前连接到该段的进程正确地分离它时。 当然,如果没有进程当前连接到该段,则删除似乎是立即的。

要正确地分离共享内存段,进程调用 shmdt 系统调用。



转换于
1996年3月29日 14:43:04 EST