UNIX/OSX version of semtimedop UNIX/OSX version of semtimedop unix unix

UNIX/OSX version of semtimedop


You can break out of a semop() call (and most other blocking calls) by getting a signal, such as one caused by alarm().

untested example:

#include <signal.h>#include <stdio.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h>volatile int alarm_triggered = 0;void alarm_handler(int sig){    alarm_triggered = 1;}int main(int argc, char **argv){    int rc;    /* set up signal handler */    signal(SIGALRM, alarm_handler);    /* ... */    alarm(30); /* 30 second timeout */    rc = semop(...);    if (rc == -1 && errno == EINTR)    {        if (alarm_triggered)        {            /* timed out! */        }    }    alarm(0); /* disable alarm */    /* ... */}