semop 函数调用成功返回 0,失败返回 -1。
--------------------------------------------------------------------------------------------------
- sem_num 参数 :
- sem_op 参数:
sem_op = 0 如果没有设置 IPC_NOWAIT,则调用进程进入睡眠状态,直到信号量的值为0;否则进程不回睡眠,直接返回 EAGAIN;
- sem_flg 参数:
//P操作函数
int sem_p( int semid, int index )
{
struct sembuf buf = { 0, -1, IPC_NOWAIT};
if ( index < 0 )
{
perror ( "index of array cannot equals a minus value!\n" );
return -1;
}
buf.sem_num = index;
if ( semop ( semid, &buf, 1) == -1)
{
perroe ( " a wrong operation to semaphore occurred!\n" );
return -1;
}
return 0;
}
int sem_p( int semid, int index )
{
struct sembuf buf = { 0, -1, IPC_NOWAIT};
if ( index < 0 )
{
perror ( "index of array cannot equals a minus value!\n" );
return -1;
}
buf.sem_num = index;
if ( semop ( semid, &buf, 1) == -1)
{
perroe ( " a wrong operation to semaphore occurred!\n" );
return -1;
}
return 0;
}
//V操作函数
int sem_p( int semid, int index )
{
struct sembuf buf = { 0, 1, IPC_NOWAIT};
if ( index < 0 )
{
perror ( "index of array cannot equals a minus value!\n" );
return -1;
}
buf.sem_num = index;
if ( semop ( semid, &buf, 1) == -1)
{
perroe ( " a wrong operation to semaphore occurred!\n" );
return -1;
}
return 0;
}
{
struct sembuf buf = { 0, 1, IPC_NOWAIT};
if ( index < 0 )
{
perror ( "index of array cannot equals a minus value!\n" );
return -1;
}
buf.sem_num = index;
if ( semop ( semid, &buf, 1) == -1)
{
perroe ( " a wrong operation to semaphore occurred!\n" );
return -1;
}
return 0;
}