LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 691|回复: 2

关于信号量的一个问题

[复制链接]
发表于 2005-3-15 12:54:46 | 显示全部楼层 |阅读模式
我的程序意思是这样的。
1.只申请一个信号量 semsid
2.通过semctl(semid,SEMFIRST,IPC_STAT,mysem),把信号量的标识符的数据结构放到     mysem.buf中
3.通过信号量标识符中的sem_perm结构得到信号量的key
这是我的程序
#define SEMNUM 1
#define SEMFIRST 0
#include<sys/ipc.h>
#include<sys/types.h>
#include<sys/sem.h>
#include<sys/shm.h>

#if defined(__GNU_LIBRARY__)&&! defined(_SEM_SEMUN_UNDEFINED)
#else
union semun
{
        int val;
        struct semid_ds *buf;
        unsigned short int * array;
        struct seminfo *__buf;
};
#endif

int main()
{
        union semun mysem;
        int semid;
        struct ipc_perm t;

        semid=semget(IPC_PRIVATE,SEMNUM,0666);
        /*get the room for the data structure semid_ds
        */
        mysem.buf=(struct semid_ds*)malloc(sizeof(struct semid_ds));


        /*get the initial value of the semaphore
        */
        semctl(semid,SEMFIRST,IPC_STAT,mysem));
        printf("\nthe key of semaphore recieved from \"ipc_perm\":%l\n",mysem.buf->sem_perm.key);

}



问题是:
我编译的时候报错 说:error: structure has no member named `key'


但是我看了ipc.h中struct sem_perm中 是有key的。

我想问问高手这是为什么?
发表于 2005-3-15 20:32:39 | 显示全部楼层
请按照置顶的论坛索引中的要求保持代码缩进,不然看起来太乱。
回复 支持 反对

使用道具 举报

发表于 2005-3-16 08:46:50 | 显示全部楼层

  1. /* arg for semctl system calls. */
  2. union semun {
  3.     struct semid_ds *buf;                /* buffer for IPC_STAT & IPC_SET */
  4.         /* ... */
  5. };

  6. /* Data structure describing a set of semaphores.  */
  7. struct semid_ds
  8. {
  9.     struct ipc_perm sem_perm;                /* operation permission struct */
  10.         /* ... */
  11. };

  12. /* Data structure used to pass permission information to IPC operations.  */
  13. struct ipc_perm
  14. {
  15.     __key_t __key;                        /* Key.  */
  16.     __uid_t uid;                        /* Owner's user ID.  */
  17.     __gid_t gid;                        /* Owner's group ID.  */
  18.     __uid_t cuid;                        /* Creator's user ID.  */
  19.     __gid_t cgid;                        /* Creator's group ID.  */
  20.     unsigned short int mode;                /* Read/write permission.  */
  21.     unsigned short int __pad1;
  22.     unsigned short int __seq;                /* Sequence number.  */
  23.     unsigned short int __pad2;
  24.     unsigned long int __unused1;
  25.     unsigned long int __unused2;
  26. };
复制代码

哪里有 key ?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表