38 #include <sys/types.h> 47 int sem_id = semget(key, num_sems, IPC_CREAT | S_IRWXU);
49 rl_log(
ERROR,
"failed to create semaphores. Errno = %d", errno);
61 if (semctl(sem_id, 0, IPC_RMID) < 0) {
62 rl_log(
ERROR,
"failed to remove semaphores. Errno = %d", errno);
73 int sem_id = semget(key, num_sems, S_IRWXU);
75 rl_log(
ERROR,
"failed to open semaphores. Errno = %d", errno);
92 struct sembuf sem_ops = {sem_num, sem_op,
NO_FLAG};
93 struct timespec t_out = {time_out, 0};
95 if (semtimedop(sem_id, &sem_ops, num_ops, &t_out) < 0) {
96 if (errno == EAGAIN) {
99 }
else if (errno == EIDRM) {
100 rl_log(
INFO,
"waiting on semaphore failed: semaphore removed");
102 }
else if (errno == EINVAL) {
104 "waiting on semaphore failed: semaphore not existing");
107 rl_log(
ERROR,
"failed doing operation on semaphore. Errno = %d",
128 struct sembuf sem_ops = {sem_num, sem_op,
NO_FLAG};
131 if (semtimedop(sem_id, &sem_ops, num_ops, &time_out) < 0) {
132 if (errno == EAGAIN) {
136 rl_log(
ERROR,
"failed doing operation on semaphore. Errno = %d",
int open_sem(key_t key, int num_sems)
void rl_log(rl_log_type type, const char *format,...)
int set_sem(int sem_id, int sem_num, int val)
int wait_sem(int sem_id, int sem_num, int time_out)
int sem_id
ID of semaphore set.
int create_sem(key_t key, int num_sems)
int remove_sem(int sem_id)
#define SEM_SET_TIME_OUT
Time out time in seconds, waiting on semaphore value set.