init ems server code
This commit is contained in:
93
plat/iptrans/src/ipcfunc.c
Normal file
93
plat/iptrans/src/ipcfunc.c
Normal file
@@ -0,0 +1,93 @@
|
||||
/*
|
||||
** CVS $Id: ipcfunc.c,v 1.4 2001/01/20 19:58:49 zhangsz Exp $
|
||||
**
|
||||
** ipcfunc.c
|
||||
** created at 2000/12/20
|
||||
** by Zhang SZ
|
||||
**
|
||||
** IPC functions for PACS-WLL project.
|
||||
**
|
||||
*/
|
||||
|
||||
#include "./include/iptrans.h"
|
||||
|
||||
/*@ignore@*/
|
||||
void *
|
||||
iptrShmInit(int shm_id, char *prog_name, key_t key, int size, int shmflg)
|
||||
{
|
||||
void *retp;
|
||||
char *func_name = "ShmInit";
|
||||
|
||||
shm_id = shmget(key, size, shmflg);
|
||||
if (shm_id == -1)
|
||||
{
|
||||
log_sys("%s: %s: shmget(key: %x)", prog_name, func_name, key);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
retp = shmat(shm_id, (char *)0, 0);
|
||||
if (retp == (void *) -1)
|
||||
{
|
||||
log_sys("%s: %s: shmat", prog_name, func_name);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return retp;
|
||||
}
|
||||
|
||||
int
|
||||
iptrSemInit(char *prog_name, key_t key, int sem_num, int sem_flg)
|
||||
{
|
||||
int initarray[sem_num];
|
||||
int sem_id, retval, i;
|
||||
char *func_name = "SemInit";
|
||||
|
||||
sem_id = semget(key, sem_num, sem_flg);
|
||||
if (sem_id == -1)
|
||||
log_sys("%s: %s: semget", prog_name, func_name);
|
||||
for (i=0; i<sem_num; i++) {
|
||||
initarray[i] = 1;
|
||||
retval = semctl(sem_id, i, SETVAL, initarray[i]);
|
||||
if (retval == -1)
|
||||
log_sys("%s: %s: semctl", prog_name, func_name);
|
||||
}
|
||||
|
||||
return sem_id;
|
||||
}
|
||||
|
||||
BOOL
|
||||
iptrSemLock(char *prog_name, int sem_id, int sem_num, unsigned nsops, int sem_flg)
|
||||
{
|
||||
int retval;
|
||||
struct sembuf lock = {0, ACQUIRE, SEM_UNDO};
|
||||
|
||||
lock.sem_num = sem_num;
|
||||
lock.sem_flg |= sem_flg;
|
||||
retval = semop(sem_id, &lock, nsops);
|
||||
if (retval == -1) {
|
||||
// char *func_name = "SemLock";
|
||||
// log_ret("%s: %s: semop(%d)", prog_name, func_name, sem_num);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
BOOL
|
||||
iptrSemUnlock(char *prog_name, int sem_id, int sem_num, unsigned nsops, int sem_flg)
|
||||
{
|
||||
int retval;
|
||||
struct sembuf unlock = {0, RELEASE, IPC_NOWAIT|SEM_UNDO};
|
||||
|
||||
unlock.sem_num = sem_num;
|
||||
unlock.sem_flg |= sem_flg;
|
||||
retval = semop(sem_id, &unlock, nsops);
|
||||
if (retval == -1) {
|
||||
// char *func_name = "SemUnlock";
|
||||
// log_ret("%s: %s: semop(%d)", prog_name, func_name, sem_num);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/*@end@*/
|
||||
Reference in New Issue
Block a user