linux用semctl获取信号量的值,为什么会出现以下情况

int ret = 0;
union semun su;
int val;
val = su.val;
ret = semctl(semid,0,GETVAL,su);
printf("val:%d\n",val);
如上,这样也能把semid的0号信号的val打印出来,为什么?val = su.val不应该放在semctl后面才行吗?

int ret = 0;
union semun su;
int val;
val = su.val;
printf("val:%d\n",val);//添加
ret = semctl(semid,0,GETVAL,su);
printf("val:%d\n",val);
printf("val:%d\n",su.val);//添加

我也感觉这个问题很奇怪。你看看上面的三个输出是不是一样?然后你再把赋值语句放在semctl后面试一试呢。

  int  i_Getval;

i_Getval=semctl(semid,semnum,GETVAL);

    semctl的返回值为信号量的值。