C语言 union semun { }什么意思

如题所述

这个也叫共用体,用法跟结构体有点相同,但数据存储“空间”跟结构体不一样,具体用法参照http://baike.baidu.com/link?url=Ayg3do4Cy4aEK0JMO74-TRZcEHZ62x-A2gmsjKi-ZlCMiZcaDbOi26sAr8ui23mD7tBzk1LfS81A3bnMOJk9-a
温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-09-26
// 系统信号量初始化接口:
// int semctl(int semid, int semnum, int cmd, ... /* union semun arg */);

// 第四个参数的具体定义一般格式(在有的linux中有预先定义好的
// 但大多数linux需要用户自己定义):
union semun {
int val;

struct semid_ds *buf;

unsigned int *array;

};

// 使用:
// 1)只创建一个信号量
int semval = 1; // 信号量值,大小自定,单独定义一下,方便后面赋值给不同的共用体形式
union semun su; // 定义共用体

int semid = semget(IPC_PRIVATE, 1, 0640 | IPC_CREAT); // 先创建信号量
su.val = semval; // 使用共用体的val进行传参
semctl(semid, 1, SETVAL, su); // 初始化信号量
// 此处省略PV操作

semctl(semid, 1, IPC_RMID); // 删除信号量

// 或者
// 2)创建一组信号量
int n = 5 // 个数自定
semid = semget(IPC_PRIVATE, n, 0640 | IPC_CREAT); // 先创建信号量
int array[n]; // VLA
int *p = array;
for (int i = 0; i < n; ++i) {
*p++ = semval;

}
su.array = array;
semctl(semid, n, SETALL, su); // 初始化信号量
// 此处省略PV操作
semctl(semid, 1, IPC_RMID); // 删除信号量
第2个回答  2016-10-03
定义联合体,但没有内容

~追问

你可以说详细点吗 我新手 哥哥 我采纳你

相似回答