当前位置: 技术问答>linux和unix
union semun 变量编译时说大小无法确定,为什么?
来源: 互联网 发布时间:2016-03-01
本文导语: 我在编译如下代码时,编译器报了一堆错误,其中有一个是“a40.c:28: 错误:‘semopts’ 的存储大小未知”,为什么啊: #include #include #include #include #include #include #include #include #define SEM_NUM 10 #define SEM_MODE...
我在编译如下代码时,编译器报了一堆错误,其中有一个是“a40.c:28: 错误:‘semopts’ 的存储大小未知”,为什么啊:
#include
#include
#include
#include
#include
#include
#include
#include
#define SEM_NUM 10
#define SEM_MODE (IPC_CREAT|0660)
void changemode(int sid, char *mode);
void printfmode (union semun *arg);
void printfmode (union semun *arg)
{
printf("mode=%d:n", arg->buf->sem_perm.mode);
return;
}
int main(void)
{
int semid;
union semun semopts;
struct semid_ds semds;
if ((semid=semget(IPC_PRIVATE, SEM_NUM, SEM_MODE))==-1)
{
fprintf(stderr, "semget error!n");
exit(1);
}
semopts.buf=&semds;
if((semctl(semid,0,IPC_STAT,semopts))==-1)
{
fprintf(stderr, "get semid_ds error!n");
exit(1);
}
printfmode(&semopts);
changemode(semid, "0600");
if((semctl(semid,0, IPC_STAT, semopts))==-1)
{
fprintf(stderr, "get semid_ds error!n");
exit(1);
}
printfmode(&semopts);
if((semctl(semid,0, IPC_RMID, 0))sem_perm.mode);
semctl(sid,0, IPC_SET, semopts);
return;
}
如果我把头文件改为
#include
//#include
//#include
#include
#include
编译可以通过,但是在运行printf("mode=%d:n", arg->buf->sem_perm.mode);
时报错,说段错误,哪位高手能指点一下阿?
#include
#include
#include
#include
#include
#include
#include
#include
#define SEM_NUM 10
#define SEM_MODE (IPC_CREAT|0660)
void changemode(int sid, char *mode);
void printfmode (union semun *arg);
void printfmode (union semun *arg)
{
printf("mode=%d:n", arg->buf->sem_perm.mode);
return;
}
int main(void)
{
int semid;
union semun semopts;
struct semid_ds semds;
if ((semid=semget(IPC_PRIVATE, SEM_NUM, SEM_MODE))==-1)
{
fprintf(stderr, "semget error!n");
exit(1);
}
semopts.buf=&semds;
if((semctl(semid,0,IPC_STAT,semopts))==-1)
{
fprintf(stderr, "get semid_ds error!n");
exit(1);
}
printfmode(&semopts);
changemode(semid, "0600");
if((semctl(semid,0, IPC_STAT, semopts))==-1)
{
fprintf(stderr, "get semid_ds error!n");
exit(1);
}
printfmode(&semopts);
if((semctl(semid,0, IPC_RMID, 0))sem_perm.mode);
semctl(sid,0, IPC_SET, semopts);
return;
}
如果我把头文件改为
#include
//#include
//#include
#include
#include
编译可以通过,但是在运行printf("mode=%d:n", arg->buf->sem_perm.mode);
时报错,说段错误,哪位高手能指点一下阿?
|
union semun semopts;
是这行的问题, 你这个union的大小系统未知.
我对这个结构不了解, 是不是需要init啊
是这行的问题, 你这个union的大小系统未知.
我对这个结构不了解, 是不是需要init啊