#include <sys/types.h>
#include <linux/ipc.h>
#include <linux/sem.h>
#include <stdio.h>
#include <stdlib.h>
#define SEM_NUM 10
#define SEM_MODE (IPC_CREAT|0660)
void printf_stat(union semun *arg);
int main(void)
{
int semid;
union semun semopts;
struct semid_ds semds;
if((semid=semget(IPC_PRIVATE,SEM_NUM,SEM_MODE))==-1)
{
}
semopts.buf=&semds;
if(semctl(semid,IPC_STAT,semopts)==-1)
{
fprintf(stderr
,"get semid_ds error!\n"); }
printfmode(&semopts);
changemode(semid,0600);
if(semctl(semid,IPC_STAT,semopts)==-1)
{
fprintf(stderr
,"get semid_ds error!\n"); }
printfmode(&semopts);
if(semctl(semid,IPC_RMID,0)<0)
{
}
}
void printfmode (union semun *arg)
{
printf(" mode=%d:\n",arg
->buf
->sem_perm.
mode); return;
}
void changemode(int sid,char *mode)
{
int rc;
union semun semopts;
struct semid_ds mysemds;
semopts.buf=&mysemds;
rc=semctl(sid,0,IPC_STAT,semopts);
if(rc==-1)
{
}
sscanf(mode
,"%ho",&semopts.
buf->sem_perm.
mode); semctl(sid,0,IPC_SET,semopts);
return;
}
I2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5jbHVkZSA8bGludXgvaXBjLmg+CiNpbmNsdWRlIDxsaW51eC9zZW0uaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCiNkZWZpbmUgU0VNX05VTSAxMAojZGVmaW5lIFNFTV9NT0RFIChJUENfQ1JFQVR8MDY2MCkKCnZvaWQgcHJpbnRmX3N0YXQodW5pb24gc2VtdW4gKmFyZyk7CgppbnQgbWFpbih2b2lkKQp7CiAgICBpbnQgc2VtaWQ7CiAgICB1bmlvbiBzZW11biBzZW1vcHRzOwogICAgc3RydWN0IHNlbWlkX2RzIHNlbWRzOwogICAgaWYoKHNlbWlkPXNlbWdldChJUENfUFJJVkFURSxTRU1fTlVNLFNFTV9NT0RFKSk9PS0xKQogICAgewogICAgICAgIGZwcmludGYoc3RkZXJyLCJzZW1nZXQgZXJyb3IhXG4iKTsKICAgICAgICBleGl0KDEpOwogICAgfQogICAgc2Vtb3B0cy5idWY9JnNlbWRzOwogICAgaWYoc2VtY3RsKHNlbWlkLElQQ19TVEFULHNlbW9wdHMpPT0tMSkKICAgIHsKICAgICAgICBmcHJpbnRmKHN0ZGVyciwiZ2V0IHNlbWlkX2RzIGVycm9yIVxuIik7CiAgICAgICAgZXhpdCgxKTsKICAgIH0KICAgIHByaW50Zm1vZGUoJnNlbW9wdHMpOwogICAgY2hhbmdlbW9kZShzZW1pZCwwNjAwKTsKICAgIGlmKHNlbWN0bChzZW1pZCxJUENfU1RBVCxzZW1vcHRzKT09LTEpCiAgICB7CiAgICAgICAgZnByaW50ZihzdGRlcnIsImdldCBzZW1pZF9kcyBlcnJvciFcbiIpOwogICAgICAgIGV4aXQoMSk7CiAgICB9CiAgICBwcmludGZtb2RlKCZzZW1vcHRzKTsKICAgIGlmKHNlbWN0bChzZW1pZCxJUENfUk1JRCwwKTwwKQogICAgewogICAgICAgIGZwcmludGYoc3RkZXJyLCJzZW1jdGwgZXJyb3JcbiIpOwogICAgICAgIGV4aXQoMSk7CiAgICB9CiAgICBleGl0KDApOwp9CnZvaWQgcHJpbnRmbW9kZSAodW5pb24gc2VtdW4gKmFyZykKewogICAgcHJpbnRmKCIgbW9kZT0lZDpcbiIsYXJnLT5idWYtPnNlbV9wZXJtLm1vZGUpOwogICAgcmV0dXJuOwp9CnZvaWQgY2hhbmdlbW9kZShpbnQgc2lkLGNoYXIgKm1vZGUpCnsKICAgIGludCByYzsKICAgIHVuaW9uIHNlbXVuIHNlbW9wdHM7CiAgICBzdHJ1Y3Qgc2VtaWRfZHMgbXlzZW1kczsKICAgIHNlbW9wdHMuYnVmPSZteXNlbWRzOwogICAgcmM9c2VtY3RsKHNpZCwwLElQQ19TVEFULHNlbW9wdHMpOwogICAgaWYocmM9PS0xKQogICAgewogICAgICAgIHByaW50Zigic2VtY3RsIGVycm9yIVxuIik7CiAgICAgICAgZXhpdCgxKTsKICAgIH0KICAgIHNzY2FuZihtb2RlLCIlaG8iLCZzZW1vcHRzLmJ1Zi0+c2VtX3Blcm0ubW9kZSk7CiAgICBzZW1jdGwoc2lkLDAsSVBDX1NFVCxzZW1vcHRzKTsKICAgIHJldHVybjsKfQo=