summaryrefslogblamecommitdiffstats
path: root/cpukit/posix/include/semaphore.h
blob: 7349270fda8329cd7d4f60903826c89bc08be78c (plain) (tree)
1
2
3
4
5
6
7
8
9
10
   


                                                          


                                                                
   

  
                            



                                                           
                                         

   

                    
 



                  


                                                     
                    



                                                          
                   







                                                        
                       

  
                    
   
                               
 


                                                                





                         
   
                                       
  
                                                            
   








                                                                  





                    
   
                                  



                                                                    
   



              
   
                                   




                                                                     
   



                  
   
                           
  
                                                
  
                                                
   



             
   
                           
  
                  
   




                            
   
                           
   
                  

                                           


      
   
                             
  
                                                  
   



             
   
                                       

                                                            
   
                 

                         



                                



                  

                         
/**
 * @file
 * 
 * @brief Private Support Information for POSIX Semaphores
 *
 * This file contains definitions that are internal to the RTEMS
 * implementation of POSIX Semaphores.
 */

/*
 *  COPYRIGHT (c) 1989-2011.
 *  On-Line Applications Research Corporation (OAR).
 *
 *  The license and distribution terms for this file may be
 *  found in the file LICENSE in this distribution or at
 *  http://www.rtems.org/license/LICENSE.
 */

#ifndef _SEMAPHORE_H
#define _SEMAPHORE_H

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @defgroup POSIX_SEMAPHORE POSIX Semaphores Support
 *
 * @ingroup POSIXAPI
 *
 * @brief Private Support Information for POSIX Semaphores
 */

#include <unistd.h>

#if defined(_POSIX_SEMAPHORES)

#include <sys/time.h>

/*
 *  11.1 Semaphore Characteristics, P1003.1b-1993, p.219
 */
typedef uint32_t sem_t;

/*
 *  Bad semaphore Id
 */
#define SEM_FAILED ((sem_t *)0)

/*
 *  11.2.1 Initialize an Unnamed Semaphore, P1003.1b-1993, p.219
 */
int sem_init(
  sem_t         *sem,
  int            pshared,
  unsigned int   value
);

/**
 * @brief Destroy an unnamed semaphore.
 *
 * 11.2.2 Destroy an Unnamed Semaphore, P1003.1b-1993, p.220
 */
int sem_destroy(
  sem_t *sem
);

/*
 *  11.2.3 Initialize/Open a Named Semaphore, P1003.1b-1993, p.221
 *
 *  NOTE: Follows open() calling conventions.
 */
sem_t *sem_open(
  const char *name,
  int         oflag,
  ...
);

/**
 * @brief Close a named semaphore.
 *
 * Routine to close a semaphore that has been opened or initialized.
 *
 * 11.2.4 Close a Named Semaphore, P1003.1b-1993, p.224
 */
int sem_close(
  sem_t *sem
);

/**
 * @brief Remove a named semaphore.
 *
 * Unlinks a named semaphore, sem_close must also be called to remove
 * the semaphore.
 *
 * 11.2.5 Remove a Named Semaphore, P1003.1b-1993, p.225
 */
int sem_unlink(
  const char *name
);

/**
 * @brief Lock a semaphore.
 *
 * 11.2.6 Lock a Semaphore, P1003.1b-1993, p.226
 *
 * NOTE: P1003.4b/D8 adds sem_timedwait(), p. 27
 */
int sem_wait(
  sem_t *sem
);

/**
 * @brief Lock a semaphore.
 *
 * @see sem_wait()
 */
int sem_trywait(
  sem_t *sem
);

#if defined(_POSIX_TIMEOUTS)
/**
 * @brief Lock a semaphore.
 */
int sem_timedwait(
  sem_t                 *__restrict sem,
  const struct timespec *__restrict timeout
);
#endif

/**
 * @brief Unlock a semaphore.
 *
 * 11.2.7 Unlock a Semaphore, P1003.1b-1993, p.227
 */
int sem_post(
  sem_t  *sem
);

/**
 * @brief Get the value of a semaphore.
 *
 * 11.2.8 Get the Value of a Semaphore, P1003.1b-1993, p.229
 */
int sem_getvalue(
  sem_t  *__restrict sem,
  int    *__restrict sval
);

#endif   /* _POSIX_SEMAPHORES */

#ifdef __cplusplus
}
#endif

#endif
/* end of include file */