#include <stdio.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <fcntl.h>
#include <semaphore.h>

int main()
{   
    sem_t *sem;
    char semname[10];
    struct timeval t;
    int sval = 0;

    
    gettimeofday(&t, NULL);
    snprintf(semname, sizeof(semname), "/semtest%d", t.tv_usec);

    sem = sem_open(semname, O_CREAT | O_EXCL, 0644, 1); 
    if (!sem) {
        perror("0: sem_open");
        return 1;
    }   
    sem_getvalue(sem, &sval);
    printf("sem %p sval %d\n", sem, sval);

    if(sem_wait(sem) < 0)
        perror("0: sem_wait");

    puts("sem_wait 0\n");
    sem_getvalue(sem, &sval);
    printf("sem %p sval %d\n", sem, sval);
    if(sem_wait(sem) < 0)
        perror("0: sem_wait");

    puts("sem_wait 0\n");
    sem_getvalue(sem, &sval);
    printf("sem %p sval %d\n", sem, sval);

    if(sem_post(sem) < 0)
        perror("1: sem_post");

    puts("sem_post 1\n");
    sem_getvalue(sem, &sval);
    printf("sem %p sval %d\n", sem, sval);

    sem_unlink(semname);
    sem_close(sem);

    puts("Exit");
    return 0;
}

