More formatting changes, new tags file.
This commit is contained in:
+59
-59
@@ -23,7 +23,7 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h> /* for semaphore functions */
|
||||
#include <sys/types.h> /* for semaphore functions */
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/sem.h>
|
||||
#include <errno.h>
|
||||
@@ -32,8 +32,8 @@
|
||||
|
||||
#define SEMAPHORE "portctrl"
|
||||
#define SEMKEY 0x706f7274 /* semaphore key */
|
||||
#define SEMCOUNT 1 /* number of semaphores to create */
|
||||
#define WMODE 0660 /* access permissions */
|
||||
#define SEMCOUNT 1 /* number of semaphores to create */
|
||||
#define WMODE 0660 /* access permissions */
|
||||
|
||||
#define SEM_SIGNAL 0,1,SEM_UNDO
|
||||
#define SEM_WAIT 0,-1,SEM_UNDO
|
||||
@@ -54,7 +54,7 @@ static char rcsId[] = "$Id$";
|
||||
static key_t
|
||||
getkey (register char *p)
|
||||
{
|
||||
return ((key_t) SEMKEY);
|
||||
return ((key_t) SEMKEY);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -65,40 +65,40 @@ getkey (register char *p)
|
||||
int
|
||||
sem_get (void)
|
||||
{
|
||||
int semid;
|
||||
union semun semval;
|
||||
int semid;
|
||||
union semun semval;
|
||||
|
||||
if ((semid = semget (getkey (SEMAPHORE), SEMCOUNT, IPC_CREAT | IPC_EXCL | WMODE)) < 0) {
|
||||
switch (errno) {
|
||||
case EEXIST:
|
||||
/* semaphore set exists, get id and return it */
|
||||
if ((semid = semget (getkey (SEMAPHORE), SEMCOUNT, IPC_EXCL | WMODE)) < 0) {
|
||||
perror ("semget");
|
||||
exit (1);
|
||||
}
|
||||
return semid;
|
||||
break;
|
||||
case EACCES:
|
||||
/* don't have permissions for semaphore, need to change key */
|
||||
perror ("semget, can't get permissions for semaphore");
|
||||
exit (1);
|
||||
break;
|
||||
default:
|
||||
perror ("semget");
|
||||
exit (1);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
/* initialise semaphore to 1 */
|
||||
semval.val = 1;
|
||||
if ((semid = semget (getkey (SEMAPHORE), SEMCOUNT, IPC_CREAT | IPC_EXCL | WMODE)) < 0) {
|
||||
switch (errno) {
|
||||
case EEXIST:
|
||||
/* semaphore set exists, get id and return it */
|
||||
if ((semid = semget (getkey (SEMAPHORE), SEMCOUNT, IPC_EXCL | WMODE)) < 0) {
|
||||
perror ("semget");
|
||||
exit (1);
|
||||
}
|
||||
return semid;
|
||||
break;
|
||||
case EACCES:
|
||||
/* don't have permissions for semaphore, need to change key */
|
||||
perror ("semget, can't get permissions for semaphore");
|
||||
exit (1);
|
||||
break;
|
||||
default:
|
||||
perror ("semget");
|
||||
exit (1);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
/* initialise semaphore to 1 */
|
||||
semval.val = 1;
|
||||
|
||||
if (semctl (semid, 0, SETVAL, semval) < 0) {
|
||||
perror ("setval, can't initialise semaphore");
|
||||
exit (1);
|
||||
}
|
||||
}
|
||||
if (semctl (semid, 0, SETVAL, semval) < 0) {
|
||||
perror ("setval, can't initialise semaphore");
|
||||
exit (1);
|
||||
}
|
||||
}
|
||||
|
||||
return semid;
|
||||
return semid;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -108,12 +108,12 @@ sem_get (void)
|
||||
int
|
||||
sem_wait (int sid)
|
||||
{
|
||||
if (semop (sid, &semaphore_wait, 1) < -1) {
|
||||
perror (SEMAPHORE);
|
||||
exit (1);
|
||||
}
|
||||
if (semop (sid, &semaphore_wait, 1) < -1) {
|
||||
perror (SEMAPHORE);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -123,12 +123,12 @@ sem_wait (int sid)
|
||||
int
|
||||
sem_signal (int sid)
|
||||
{
|
||||
if (semop (sid, &semaphore_signal, 1) < -1) {
|
||||
perror (SEMAPHORE);
|
||||
exit (1);
|
||||
}
|
||||
if (semop (sid, &semaphore_signal, 1) < -1) {
|
||||
perror (SEMAPHORE);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -138,20 +138,20 @@ sem_signal (int sid)
|
||||
int
|
||||
sem_remove (int sid)
|
||||
{
|
||||
int i;
|
||||
union semun dummy;
|
||||
int i;
|
||||
union semun dummy;
|
||||
|
||||
if ((i = semctl (sid, 0, IPC_RMID, dummy)) < 0) {
|
||||
switch (i) {
|
||||
case EIDRM:
|
||||
/* semaphore removed */
|
||||
return 0;
|
||||
break;
|
||||
default:
|
||||
perror ("semctl, removing semaphore");
|
||||
exit (1);
|
||||
}
|
||||
}
|
||||
if ((i = semctl (sid, 0, IPC_RMID, dummy)) < 0) {
|
||||
switch (i) {
|
||||
case EIDRM:
|
||||
/* semaphore removed */
|
||||
return 0;
|
||||
break;
|
||||
default:
|
||||
perror ("semctl, removing semaphore");
|
||||
exit (1);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user