/*  
 * ######
 * ## SEMA2.c
 * ## ~~~~~~~
 * ## 04.02.1995: Creation TL
 * ## 04.02.2008:
 * ######
 */

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>

main()
{
  int    semid, val, nsems, semnum, status;
  key_t  key;
  struct sembuf sops;
  size_t nsops;

  /* recuperation du groupe 3 constitue de 1 semaphore */
  
  key   = 3;
  nsems = 1;
  
  semid = semget(key, nsems, 0640 | IPC_CREAT);
  if ( semid == -1 ) {
    perror( " sema2> Pb. recuperation SEMAPHORE\n" ); exit( 1 );
  }

  nsops=( size_t ) nsems;
  sops.sem_num = 0;
  sops.sem_op  = 1; /* > 0 : donne un droit supplementaire*/
  sops.sem_flg = 0;

  status =  semop( semid, &sops, nsops );
  if ( status == -1 ) {
    perror( " sema2> Pb. incrementation SEMAPHORE\n" ); exit(2);
  }

  semnum=0;
  val = semctl(semid, semnum, GETVAL, NULL);
  if ( val == -1 ) {
    perror( " sema2> Pb. recuperation valeur SEMAPHORE\n" );
  }

  printf( " sema2> Valeur du SEMAPHORE(3, 0) = %d\n", val );
  exit( 0 );

}
/* ---  fin  sema2.c  --- */
