semaphores.c
Go to the documentation of this file.
00001 
00026 #include "sr_communications/ipc/semaphores.h"
00027 
00029 
00030 int createKey(key_t * semKey, char * semFile)
00031 {
00032     if (access(semFile, F_OK) != 0) {
00033         if (creat(semFile, 0777) == -1) {
00034             perror("createKey() - error creating file keys for semaphore\n");
00035             fprintf(stderr, "kcreateKey %s\n", semFile);
00036             return -1;
00037         }
00038     }
00039 
00040     if ((*semKey = ftok(semFile, 'S')) < 0) {
00041         perror("createKey() - error ftok ");
00042         return -2;
00043     }
00044 
00045     return (int) *semKey;
00046 }
00047 
00049 
00050 int getSemID(key_t semKey, int * semID)
00051 {
00052     *semID = semget(semKey, 1, IPC_CREAT | 0777);
00053     if (*semID == -1) {
00054         perror("error semget");
00055         return -1;
00056     }
00057 
00058     if (semctl(*semID, 0, SETVAL, 1) < 0) {
00059         perror("error semctl");
00060         return -2;
00061     }
00062 
00063     return (int) *semID;
00064 }
00065 
00067 
00068 int rmSem(int semID)
00069 {
00070     struct sembuf arg[] = {0,
00071                            0,
00072                            0};
00073 
00074     if (semctl(semID, 0, IPC_RMID, arg) < 0) {
00075         perror("rmSem() - error semctl");
00076         return -1;
00077     }
00078 
00079     return 0;
00080 }
00081 
00083 
00084 int waitSem(int semID)
00085 {
00086     struct sembuf opIn[] = {0,
00087                             -1,
00088                             0}; /*  opIn.sem_num = 0;
00089      opIn.sem_op = -1;
00090      opIn.sem_flg = 0;
00091      */
00092     if (semop(semID, opIn, 1) < 0) {
00093         perror("waitSem() - error semop");
00094         return -1;
00095     }
00096 
00097     return 0;
00098 }
00099 
00101 
00102 int freeSem(int semID)
00103 {
00104     struct sembuf opOut[] = {0,
00105                              1,
00106                              0};
00107 
00108     if (semop(semID, opOut, 1) < 0) {
00109         perror("freeSem() - error semop");
00110         return -1;
00111     }
00112 
00113     return 0;
00114 }
00115 


sr_communications
Author(s): Raul Perula-Martinez , Victor Gonzalez
autogenerated on Wed Aug 26 2015 16:26:47