37 #include <sys/types.h> 46 int sem_id = semget(key, num_sems, IPC_CREAT | S_IRWXU);
48 rl_log(
ERROR,
"failed to create semaphores. Errno = %d", errno);
60 if (semctl(sem_id, 0, IPC_RMID) < 0) {
61 rl_log(
ERROR,
"failed to remove semaphores. Errno = %d", errno);
72 int sem_id = semget(key, num_sems, S_IRWXU);
74 rl_log(
ERROR,
"failed to open semaphores. Errno = %d", errno);
91 struct sembuf sem_ops = {sem_num, sem_op,
NO_FLAG};
92 struct timespec t_out = {time_out, 0};
94 if (semtimedop(sem_id, &sem_ops, num_ops, &t_out) < 0) {
95 if (errno == EAGAIN) {
98 }
else if (errno == EIDRM) {
99 rl_log(
INFO,
"waiting on semaphore failed: semaphore removed");
101 }
else if (errno == EINVAL) {
103 "waiting on semaphore failed: semaphore not existing");
106 rl_log(
ERROR,
"failed doing operation on semaphore. Errno = %d",
127 struct sembuf sem_ops = {sem_num, sem_op,
NO_FLAG};
130 if (semtimedop(sem_id, &sem_ops, num_ops, &time_out) < 0) {
131 if (errno == EAGAIN) {
135 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.