📄 sem.c
字号:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int SemCreate( key_t k, int v )
{
int r;
if( ( r = semget( k, 1, IPC_CREAT | IPC_NOWAIT | 0666 ) ) >= 0 ){
if( semctl( r, 0, SETVAL, v ) == 0 )
return( 0 );
semctl( r, IPC_RMID | IPC_NOWAIT, 0 );
}
return( -1 );
}
void SemDelete( key_t k )
{
int r;
if( ( r = semget( k, 1, IPC_EXCL | IPC_NOWAIT | 0666 ) ) >= 0 )
semctl( r, IPC_RMID | IPC_NOWAIT, 0 );
}
int SemOperate( key_t k, int v, int w )
{
int r;
struct sembuf p = { 0, 0, SEM_UNDO };
if( w )
p.sem_flg |= 0;
else
p.sem_flg |= IPC_NOWAIT;
p.sem_op = v;
if( ( r = semget( k, 1, IPC_EXCL | IPC_NOWAIT | 0666 ) ) >= 0
&& semop( r, &p, 1 ) == 0 )
return( 0 );
return( -1 );
}
int SemInfo( key_t k, int *v, int *p, int *n, int *z )
{
int r;
if( ( r = semget( k, 1, IPC_EXCL | IPC_NOWAIT | 0666 ) ) >= 0 )
{
*v=semctl( r, 0, GETVAL, 0 );
*p=semctl( r, 0, GETPID, 0 );
*n=semctl( r, 0, GETNCNT, 0 );
*z=semctl( r, 0, GETZCNT, 0 );
return(0);
}
return(-1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -