version 1.239, 2014/04/23 13:43:01
|
version 1.245, 2014/06/16 18:48:22
|
Line 1
|
Line 1
|
/* |
/* |
================================================================================ |
================================================================================ |
RPL/2 (R) version 4.1.17 |
RPL/2 (R) version 4.1.18 |
Copyright (C) 1989-2014 Dr. BERTRAND Joël |
Copyright (C) 1989-2014 Dr. BERTRAND Joël |
|
|
This file is part of RPL/2. |
This file is part of RPL/2. |
Line 110
|
Line 110
|
# include <sys/shm.h> |
# include <sys/shm.h> |
# endif |
# endif |
|
|
# ifndef __RPLCAS |
# ifndef IPCS_SYSV |
# ifndef IPCS_SYSV |
# include <semaphore.h> |
# include <semaphore.h> |
# else |
# else |
# include <sys/ipc.h> |
# include <sys/ipc.h> |
# include <sys/sem.h> |
# include <sys/sem.h> |
|
|
# ifdef OS2 |
# ifdef OS2 |
# define INCL_DOSSEMAPHORES |
# define INCL_DOSSEMAPHORES |
# define INCL_DOSMEMMGR |
# define INCL_DOSMEMMGR |
# define INCL_DOSERRORS |
# define INCL_DOSERRORS |
# include <os2.h> |
# include <os2.h> |
|
|
typedef struct _OS2SEM |
typedef struct _OS2SEM |
{ |
{ |
HMTX hmtx; |
HMTX hmtx; |
HEV hev; |
HEV hev; |
ULONG shared; |
ULONG shared; |
ULONG *cnt; |
ULONG *cnt; |
ULONG *nopened; |
ULONG *nopened; |
ULONG allocated; |
ULONG allocated; |
} sem_t; |
} sem_t; |
# else // IPCS_SYSV |
# else // IPCS_SYSV |
typedef struct |
typedef struct |
{ |
{ |
int sem; |
int sem; |
int alloue; |
int alloue; |
unsigned char *path; |
unsigned char *path; |
pid_t pid; |
pid_t pid; |
pthread_t tid; |
pthread_t tid; |
} sem_t; |
} sem_t; |
|
# endif |
|
|
|
# ifndef SEM_FAILED |
|
# define SEM_FAILED NULL |
|
# endif |
|
|
|
sem_t *sem_open_SysV(const char *nom, int oflag, ...); |
|
int sem_init_SysV(sem_t *sem, int shared, unsigned int value); |
|
int sem_close_SysV(sem_t *sem); |
|
int sem_wait_SysV(sem_t *sem); |
|
int sem_trywait_SysV(sem_t *sem); |
|
int sem_timedwait_SysV(sem_t *sem, struct timespec *ts); |
|
int sem_post_SysV(sem_t *sem); |
|
int sem_getvalue_SysV(sem_t *sem, int *value); |
|
int sem_unlink_SysV(char *nom); |
|
int sem_destroy_SysV(sem_t *sem); |
|
# endif |
# endif |
|
|
|
# ifndef SEM_FAILED |
|
# define SEM_FAILED NULL |
|
# endif |
|
|
|
sem_t *sem_open_SysV(const char *nom, int oflag, ...); |
|
int sem_init_SysV(sem_t *sem, int shared, unsigned int value); |
|
int sem_close_SysV(sem_t *sem); |
|
int sem_wait_SysV(sem_t *sem); |
|
int sem_trywait_SysV(sem_t *sem); |
|
int sem_timedwait_SysV(sem_t *sem, struct timespec *ts); |
|
int sem_post_SysV(sem_t *sem); |
|
int sem_getvalue_SysV(sem_t *sem, int *value); |
|
int sem_unlink_SysV(char *nom); |
|
int sem_destroy_SysV(sem_t *sem); |
# endif |
# endif |
|
|
# include <setjmp.h> |
# include <setjmp.h> |
Line 459 union semun
|
Line 457 union semun
|
#ifndef RPLARGS |
#ifndef RPLARGS |
# ifdef SEMAPHORES_NOMMES |
# ifdef SEMAPHORES_NOMMES |
# define LONGUEUR_NOM_SEMAPHORE 64 |
# define LONGUEUR_NOM_SEMAPHORE 64 |
# endif |
|
|
|
# ifdef SEMAPHORES_NOMMES |
|
# define __PTR__ * |
# define __PTR__ * |
# else |
# else |
# define __PTR__ |
# define __PTR__ |
Line 488 union semun
|
Line 483 union semun
|
__EXTERN__ sem_t __PTR__ semaphore_gestionnaires_signaux; |
__EXTERN__ sem_t __PTR__ semaphore_gestionnaires_signaux; |
|
|
__EXTERN__ volatile int routine_recursive; |
__EXTERN__ volatile int routine_recursive; |
#endif |
|
|
|
#define SEM_FORK 0 |
# define SEM_FORK 0 |
#define SEM_QUEUE 1 |
# define SEM_QUEUE 1 |
#define SEM_SIGNAUX 2 |
# define SEM_SIGNAUX 2 |
#define SEM_SIGNALISATION 3 |
# define SEM_SIGNALISATION 3 |
#define SEM_ARRET_SIGNALISATION 4 |
# define SEM_ARRET_SIGNALISATION 4 |
sem_t *sem_init2(unsigned int valeur, pid_t pid, int ordre); |
|
sem_t *sem_init3(unsigned int valeur, pid_t pid, pthread_t tid, int ordre); |
sem_t *sem_init2(unsigned int valeur, pid_t pid, int ordre); |
int sem_destroy2(sem_t *semaphore_p, pid_t pid, int ordre); |
sem_t *sem_init3(unsigned int valeur, pid_t pid, pthread_t tid, int ordre); |
int sem_destroy3(sem_t *semaphore_p, pid_t pid, pthread_t tid, int ordre); |
int sem_destroy2(sem_t *semaphore_p, pid_t pid, int ordre); |
int sem_getvalue2(sem_t *semaphore, int *valeur); |
int sem_destroy3(sem_t *semaphore_p, pid_t pid, pthread_t tid, int ordre); |
sem_t *sem_open2(pid_t pid, int ordre); |
int sem_getvalue2(sem_t *semaphore, int *valeur); |
|
sem_t *sem_open2(pid_t pid, int ordre); |
|
#endif |
|
|
// Le mutex est là uniquement pour pouvoir émuler le comportement |
// Le mutex est là uniquement pour pouvoir émuler le comportement |
// de sem_getvalue() sur un système comme MacOS X qui ne possède pas |
// de sem_getvalue() sur un système comme MacOS X qui ne possède pas |