📄 sem_fun.c
字号:
#define SEM 0x9000L
static int sid;
int addsem(short sem_num)
{
int abc;
struct sembuf as[1] =
{
{0,1,SEM_UNDO|IPC_NOWAIT},
};
as[0].sem_num=sem_num;
if ((abc=semop(sid,&as[0],1))<0)
{
sprintf(str,"¤£ˉà2?¥[?H?1?O[%d]",sem_num);
err_quit(str);
}
return(abc);
}
void decsem(short sem_num)
{
int dec;
struct sembuf as[1] =
{
{0,-1,IPC_NOWAIT},
};
as[0].sem_num=sem_num;
if (semop(sid,&as[0],1)<0)
{
sprintf(str,"¤£ˉà??′??H?1?O[%d]",sem_num);
err_quit(str);
}
}
void delsem()
{
if ((sid=semget(SEM,MAX_SEM_NUM,PERMS))<0)
{
if (errno==ENOENT) return;
else
{
sprintf(str,"¤£ˉààò±o?H?1?O 0x%X",SEM);
err_quit(str);
}
}
if (semctl(sid,0,GETVAL,0))
err_quit("¤£ˉà|P?é±ò°ê¨a-ó¥H¤W|?aA?1μ{|?");
semctl(sid,1,IPC_RMID,0);
}
void creatsem(short sem_num)
{
struct sembuf as[2] =
{
{0,0,0|IPC_CREAT},
{0,1,0},
};
as[0].sem_num=sem_num;
as[1].sem_num=sem_num;
if ((sid=semget(SEM,MAX_SEM_NUM,PERMS|IPC_CREAT))<0)
{
sprintf(str,"¤£ˉààò±o?H?1?O 0x%X",SEM);
err_quit(str);
};
}
void testsem(short sem_num)
{
int test;
struct sembuf as[2] =
{
{0,0,0|IPC_CREAT},
{0,1,0},
};
as[0].sem_num=sem_num;
as[1].sem_num=sem_num;
if ((sid=semget(SEM,MAX_SEM_NUM,PERMS|IPC_CREAT))<0)
{
sprintf(str,"¤£ˉààò±o?H?1?O 0x%X",SEM);
err_quit(str);
}
if (semop(sid,&as[0],2)<0)
{
sprintf(str,"¤£ˉàà?′ú?H?1?O[%d]",sem_num);
err_quit(str);
}
}
int valu_sem(ushort num)
{
return (semctl(sid,num,GETVAL,0));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -