version 1.35, 2011/09/20 15:45:53
|
version 1.40, 2011/11/26 10:01:33
|
Line 1
|
Line 1
|
/* |
/* |
================================================================================ |
================================================================================ |
RPL/2 (R) version 4.1.3 |
RPL/2 (R) version 4.1.5 |
Copyright (C) 1989-2011 Dr. BERTRAND Joël |
Copyright (C) 1989-2011 Dr. BERTRAND Joël |
|
|
This file is part of RPL/2. |
This file is part of RPL/2. |
Line 22
|
Line 22
|
|
|
#include "rpl-conv.h" |
#include "rpl-conv.h" |
|
|
|
|
#ifdef SEMAPHORES_NOMMES |
#ifdef SEMAPHORES_NOMMES |
|
|
// Les fonctions suivantes ne sont utilisées que dans le cas d'un |
// Les fonctions suivantes ne sont utilisées que dans le cas d'un |
Line 297 sem_init_SysV(sem_t *semaphore, int shar
|
Line 298 sem_init_SysV(sem_t *semaphore, int shar
|
return(-1); |
return(-1); |
} |
} |
|
|
sprintf((*semaphore).path, "%s/RPL-SIGSEMAPHORE-%d-%llX", |
sprintf((*semaphore).path, "%s/RPL-SEMAPHORE-%d-%llX-%d", |
racine_segment, pthread_self(), |
racine_segment, (int) getpid(), pthread_self(), shared); |
(int) getpid(), pthread_self()); |
|
|
|
if ((desc = open((*semaphore).path, O_RDWR | O_CREAT | O_EXCL, |
if ((desc = open((*semaphore).path, O_RDWR | O_CREAT | O_EXCL, |
S_IRUSR | S_IWUSR)) == -1) |
S_IRUSR | S_IWUSR)) == -1) |
Line 309 sem_init_SysV(sem_t *semaphore, int shar
|
Line 309 sem_init_SysV(sem_t *semaphore, int shar
|
} |
} |
|
|
(*semaphore).pid = getpid(); |
(*semaphore).pid = getpid(); |
(*semaphore).tid = pthread_slef(); |
(*semaphore).tid = pthread_self(); |
clef = ftok((*semaphore).path, 1); |
clef = ftok((*semaphore).path, 1); |
close(desc); |
close(desc); |
|
|
Line 335 sem_init_SysV(sem_t *semaphore, int shar
|
Line 335 sem_init_SysV(sem_t *semaphore, int shar
|
|
|
return(ios); |
return(ios); |
# else // OS/2 |
# else // OS/2 |
|
sem_t *psem; |
|
|
sem_t *psem; |
psem = semaphore; |
|
|
psem = semaphore; |
|
|
|
if (shared != 0) |
|
{ |
|
errno = ENOSYS; |
|
return(-1); |
|
} |
|
|
|
if (((*psem).cnt = malloc(sizeof(ULONG))) == NULL) |
|
{ |
|
free(psem); |
|
errno = ENOMEM; |
|
return(-1); |
|
} |
|
|
|
if (((*psem).nopened = malloc(sizeof(ULONG))) == NULL) |
if (((*psem).cnt = malloc(sizeof(ULONG))) == NULL) |
{ |
{ |
free((*psem).cnt); |
free(psem); |
free(psem); |
errno = ENOMEM; |
errno = ENOMEM; |
return(-1); |
return(-1); |
} |
} |
|
|
|
if (DosCreateMutexSem(NULL, &((*psem).hmtx), 0, 0) != 0) |
if (((*psem).nopened = malloc(sizeof(ULONG))) == NULL) |
{ |
{ |
free((*psem).cnt); |
free((*psem).cnt); |
free((*psem).nopened); |
free(psem); |
free(psem); |
errno = ENOMEM; |
return(-1); |
return(-1); |
} |
} |
|
|
if (DosCreateEventSem(NULL, &((*psem).hev), 0, (valeur != 0) ? 1 : 0) != 0) |
if (DosCreateMutexSem(NULL, &((*psem).hmtx), 0, 0) != 0) |
{ |
{ |
DosCloseMutexSem((*psem).hmtx); |
free((*psem).cnt); |
free((*psem).cnt); |
free((*psem).nopened); |
free((*psem).nopened); |
free(psem); |
free(psem); |
return(-1); |
return(-1); |
} |
} |
|
|
|
(*(*psem).cnt) = valeur; |
if (DosCreateEventSem(NULL, &((*psem).hev), 0, (valeur != 0) ? 1 : 0) |
(*(*psem).nopened) = 1; |
!= 0) |
(*psem).shared = shared; |
{ |
(*psem).allocated = 0; |
DosCloseMutexSem((*psem).hmtx); |
|
free((*psem).cnt); |
|
free((*psem).nopened); |
|
free(psem); |
|
return(-1); |
|
} |
|
|
return(0); |
(*(*psem).cnt) = valeur; |
|
(*(*psem).nopened) = 1; |
|
(*psem).shared = shared; |
|
(*psem).allocated = 0; |
|
|
|
return(0); |
# endif |
# endif |
} |
} |
|
|
Line 411 sem_destroy_SysV(sem_t *semaphore)
|
Line 404 sem_destroy_SysV(sem_t *semaphore)
|
|
|
return(0); |
return(0); |
# else // OS/2 |
# else // OS/2 |
|
sem_t *psem; |
|
|
sem_t *psem; |
psem = semaphore; |
|
|
psem = semaphore; |
|
|
|
if (DosRequestMutexSem((*psem).hmtx, SEM_INDEFINITE_WAIT) != 0) |
if (DosRequestMutexSem((*psem).hmtx, SEM_INDEFINITE_WAIT) != 0) |
{ |
{ |
return(EINVAL); |
return(EINVAL); |
} |
} |
|
|
if (DosCloseMutexSem((*psem).hmtx) != 0) |
if (DosCloseMutexSem((*psem).hmtx) != 0) |
{ |
{ |
return(EINVAL); |
return(EINVAL); |
} |
} |
|
|
while(DosCloseEventSem((*psem).hev) == ERROR_SEM_BUSY) |
while(DosCloseEventSem((*psem).hev) == ERROR_SEM_BUSY) |
{ |
{ |
DosPostEventSem((*psem).hev); |
DosPostEventSem((*psem).hev); |
} |
} |
|
|
(*(*psem).nopened)--; |
(*(*psem).nopened)--; |
|
|
if ((*psem).shared == 0) |
if ((*psem).shared == 0) |
{ |
|
free((*psem).cnt); |
|
free((*psem).nopened); |
|
} |
|
else |
|
{ |
|
if ((*(*psem).nopened) == 0) |
|
{ |
{ |
DosFreeMem((*psem).cnt); |
free((*psem).cnt); |
|
free((*psem).nopened); |
|
} |
|
else |
|
{ |
|
if ((*(*psem).nopened) == 0) |
|
{ |
|
DosFreeMem((*psem).cnt); |
|
} |
} |
} |
} |
|
|
|
if ((*psem).allocated != 0) |
|
{ |
|
free(psem); |
|
} |
|
|
|
return(0); |
if ((*psem).allocated != 0) |
|
{ |
|
free(psem); |
|
} |
|
|
|
return(0); |
# endif |
# endif |
} |
} |
|
|
Line 477 sem_wait_SysV(sem_t *semaphore)
|
Line 468 sem_wait_SysV(sem_t *semaphore)
|
|
|
return(0); |
return(0); |
# else // OS/2 |
# else // OS/2 |
|
sem_t *psem; |
|
|
sem_t *psem; |
ULONG cnt; |
|
|
ULONG cnt; |
psem = semaphore; |
|
|
psem = semaphore; |
if (DosWaitEventSem((*psem).hev, SEM_INDEFINITE_WAIT) != 0) |
|
{ |
if (DosWaitEventSem((*psem).hev, SEM_INDEFINITE_WAIT) != 0) |
errno = EINVAL; |
{ |
return(-1); |
errno = EINVAL; |
} |
return(-1); |
|
} |
|
|
|
if (DosRequestMutexSem((*psem).hmtx, SEM_INDEFINITE_WAIT) != 0) |
|
{ |
|
errno = EINVAL; |
|
return(-1); |
|
} |
|
|
|
if ((*(*psem).cnt) > 0) |
if (DosRequestMutexSem((*psem).hmtx, SEM_INDEFINITE_WAIT) != 0) |
{ |
{ |
(*(*psem).cnt)--; |
errno = EINVAL; |
} |
return(-1); |
|
} |
|
|
if ((*(*psem).cnt) == 0) |
if ((*(*psem).cnt) > 0) |
{ |
{ |
DosResetEventSem((*psem).hev, &cnt); |
(*(*psem).cnt)--; |
} |
} |
|
|
DosReleaseMutexSem((*psem).hmtx); |
if ((*(*psem).cnt) == 0) |
return(0); |
{ |
|
DosResetEventSem((*psem).hev, &cnt); |
|
} |
|
|
|
DosReleaseMutexSem((*psem).hmtx); |
|
return(0); |
# endif |
# endif |
} |
} |
|
|
Line 533 sem_trywait_SysV(sem_t *semaphore)
|
Line 522 sem_trywait_SysV(sem_t *semaphore)
|
|
|
return(0); |
return(0); |
# else // OS/2 |
# else // OS/2 |
|
int ios; |
|
|
int ios; |
sem_t *psem; |
|
|
sem_t *psem; |
|
|
|
ULONG cnt; |
ULONG cnt; |
|
|
psem = semaphore; |
psem = semaphore; |
|
|
if ((ios = DosWaitEventSem((*psem).hev, SEM_IMMEDIATE_RETURN)) != 0) |
|
{ |
|
errno = (ios == ERROR_TIMEOUT) ? EAGAIN : EINVAL; |
|
return(-1); |
|
} |
|
|
|
if (DosRequestMutexSem((*psem).hmtx, SEM_INDEFINITE_WAIT) != 0) |
if ((ios = DosWaitEventSem((*psem).hev, SEM_IMMEDIATE_RETURN)) != 0) |
{ |
{ |
errno = EINVAL; |
errno = (ios == ERROR_TIMEOUT) ? EAGAIN : EINVAL; |
return(-1); |
return(-1); |
} |
} |
|
|
if ((*(*psem).cnt) > 0) |
if (DosRequestMutexSem((*psem).hmtx, SEM_INDEFINITE_WAIT) != 0) |
{ |
{ |
(*(*psem).cnt)--; |
errno = EINVAL; |
} |
return(-1); |
|
} |
|
|
if ((*(*psem).cnt) == 0) |
if ((*(*psem).cnt) > 0) |
{ |
{ |
DosResetEventSem((*psem).hev, &cnt); |
(*(*psem).cnt)--; |
} |
} |
|
|
DosReleaseMutexSem((*psem).hmtx); |
if ((*(*psem).cnt) == 0) |
return(0); |
{ |
|
DosResetEventSem((*psem).hev, &cnt); |
|
} |
|
|
|
DosReleaseMutexSem((*psem).hmtx); |
|
return(0); |
# endif |
# endif |
} |
} |
|
|
Line 591 sem_post_SysV(sem_t *semaphore)
|
Line 578 sem_post_SysV(sem_t *semaphore)
|
|
|
return(0); |
return(0); |
# else // OS/2 |
# else // OS/2 |
|
sem_t *psem; |
|
|
sem_t *psem; |
psem = semaphore; |
|
|
psem = semaphore; |
|
|
|
if (DosRequestMutexSem((*psem).hmtx, SEM_INDEFINITE_WAIT) != 0) |
|
{ |
|
errno = EINVAL; |
|
return(-1); |
|
} |
|
|
|
(*(*psem).cnt)++; |
if (DosRequestMutexSem((*psem).hmtx, SEM_INDEFINITE_WAIT) != 0) |
DosPostEventSem((*psem).hev); |
{ |
DosReleaseMutexSem((*psem).hmtx); |
errno = EINVAL; |
|
return(-1); |
|
} |
|
|
return(0); |
(*(*psem).cnt)++; |
|
DosPostEventSem((*psem).hev); |
|
DosReleaseMutexSem((*psem).hmtx); |
|
|
|
return(0); |
# endif |
# endif |
} |
} |
|
|
Line 624 sem_getvalue_SysV(sem_t *semaphore, int
|
Line 609 sem_getvalue_SysV(sem_t *semaphore, int
|
|
|
return(0); |
return(0); |
# else |
# else |
|
sem_t *psem; |
|
|
sem_t *psem; |
psem = semaphore; |
|
|
psem = semaphore; |
if (DosRequestMutexSem((*psem).hmtx, SEM_INDEFINITE_WAIT) != 0) |
|
{ |
if (DosRequestMutexSem((*psem).hmtx, SEM_INDEFINITE_WAIT) != 0) |
errno = EINVAL; |
{ |
return(-1); |
errno = EINVAL; |
} |
return(-1); |
|
} |
|
|
|
(*valeur) = (*(*psem).cnt); |
|
DosReleaseMutexSem((*psem).hmtx); |
|
|
|
return(0); |
(*valeur) = (*(*psem).cnt); |
|
DosReleaseMutexSem((*psem).hmtx); |
|
|
|
return(0); |
# endif |
# endif |
} |
} |
|
|
Line 693 sem_t
|
Line 676 sem_t
|
(*semaphore).pid = getpid(); |
(*semaphore).pid = getpid(); |
(*semaphore).tid = pthread_self(); |
(*semaphore).tid = pthread_self(); |
# else |
# else |
|
if ((nom_segment = malloc((strlen(racine_memoire_OS2) + strlen(nom) + 1) |
if ((nom_segment = malloc((strlen(racine_memoire_OS2) + strlen(nom) + 1) |
* sizeof(unsigned char))) == NULL) |
* sizeof(unsigned char))) == NULL) |
|
{ |
|
return(SEM_FAILED); |
|
} |
|
|
|
sprintf(nom_segment, "%s%s", racine_memoire_OS2, nom); |
|
ptr = nom_segment; |
|
|
|
while((*ptr) != d_code_fin_chaine) |
|
{ |
|
if ((*ptr) == '/') |
|
{ |
{ |
(*ptr) = '\\'; |
return(SEM_FAILED); |
} |
} |
|
|
ptr++; |
sprintf(nom_segment, "%s%s", racine_memoire_OS2, nom); |
} |
ptr = nom_segment; |
|
|
if ((nom_absolu = malloc((strlen(racine_semaphores_OS2) + strlen(nom) |
while((*ptr) != d_code_fin_chaine) |
+ 2) * sizeof(unsigned char))) == NULL) |
{ |
{ |
if ((*ptr) == '/') |
return(SEM_FAILED); |
{ |
} |
(*ptr) = '\\'; |
|
} |
|
|
sprintf(nom_absolu, "%s%s", racine_semaphores_OS2, nom); |
ptr++; |
ptr = nom_absolu; |
} |
|
|
while((*ptr) != d_code_fin_chaine) |
if ((nom_absolu = malloc((strlen(racine_semaphores_OS2) + strlen(nom) |
{ |
+ 2) * sizeof(unsigned char))) == NULL) |
if ((*ptr) == '/') |
|
{ |
{ |
(*ptr) = '\\'; |
return(SEM_FAILED); |
} |
} |
|
|
ptr++; |
sprintf(nom_absolu, "%s%s", racine_semaphores_OS2, nom); |
} |
ptr = nom_absolu; |
|
|
|
while((*ptr) != d_code_fin_chaine) |
|
{ |
|
if ((*ptr) == '/') |
|
{ |
|
(*ptr) = '\\'; |
|
} |
|
|
(*(ptr + 1)) = d_code_fin_chaine; |
ptr++; |
|
} |
|
|
if ((psem = malloc(sizeof(sem_t))) == NULL) |
(*(ptr + 1)) = d_code_fin_chaine; |
{ |
|
return(SEM_FAILED); |
|
} |
|
|
|
(*psem).allocated = 1; |
if ((psem = malloc(sizeof(sem_t))) == NULL) |
|
{ |
|
return(SEM_FAILED); |
|
} |
|
|
|
(*psem).allocated = 1; |
# endif |
# endif |
|
|
if ((oflag & O_CREAT) == 0) |
if ((oflag & O_CREAT) == 0) |
Line 767 sem_t
|
Line 748 sem_t
|
return(SEM_FAILED); |
return(SEM_FAILED); |
} |
} |
# else // OS/2 |
# else // OS/2 |
if ((psem = malloc(sizeof(sem_t))) == NULL) |
if ((psem = malloc(sizeof(sem_t))) == NULL) |
{ |
{ |
free(nom_absolu); |
free(nom_absolu); |
free(nom_segment); |
free(nom_segment); |
return(SEM_FAILED); |
return(SEM_FAILED); |
} |
} |
|
|
(*ptr) = 'M'; |
|
|
|
if (DosOpenMutexSem(nom_absolu, &((*psem).hmtx)) != 0) |
(*ptr) = 'M'; |
{ |
|
free(psem); |
|
free(nom_absolu); |
|
free(nom_segment); |
|
|
|
return(SEM_FAILED); |
if (DosOpenMutexSem(nom_absolu, &((*psem).hmtx)) != 0) |
} |
{ |
|
free(psem); |
|
free(nom_absolu); |
|
free(nom_segment); |
|
|
(*ptr) = 'S'; |
return(SEM_FAILED); |
|
} |
|
|
if (DosOpenEventSem(nom_absolu, &((*psem).hev)) != 0) |
(*ptr) = 'S'; |
{ |
|
DosCloseMutexSem((*psem).hmtx); |
|
|
|
free(psem); |
if (DosOpenEventSem(nom_absolu, &((*psem).hev)) != 0) |
free(nom_absolu); |
{ |
free(nom_segment); |
DosCloseMutexSem((*psem).hmtx); |
|
|
return(SEM_FAILED); |
free(psem); |
} |
free(nom_absolu); |
|
free(nom_segment); |
|
|
if (DosGetNamedSharedMem(&base, nom_segment, PAG_WRITE | PAG_READ) != 0) |
return(SEM_FAILED); |
{ |
} |
DosCloseMutexSem((*psem).hmtx); |
|
|
|
free(nom_absolu); |
if (DosGetNamedSharedMem(&base, nom_segment, PAG_WRITE | PAG_READ) |
free(nom_segment); |
!= 0) |
free(psem); |
{ |
|
DosCloseMutexSem((*psem).hmtx); |
|
|
return(SEM_FAILED); |
free(nom_absolu); |
} |
free(nom_segment); |
|
free(psem); |
|
|
free(nom_segment); |
return(SEM_FAILED); |
|
} |
|
|
(*psem).cnt = (ULONG *) base; |
free(nom_segment); |
(*psem).nopened = ((ULONG *) base) + 1; |
|
(*psem).shared = 1; |
|
|
|
if (DosRequestMutexSem((*psem).hmtx, SEM_INDEFINITE_WAIT) != 0) |
(*psem).cnt = (ULONG *) base; |
{ |
(*psem).nopened = ((ULONG *) base) + 1; |
DosCloseMutexSem((*psem).hmtx); |
(*psem).shared = 1; |
|
|
free(nom_absolu); |
if (DosRequestMutexSem((*psem).hmtx, SEM_INDEFINITE_WAIT) != 0) |
free(nom_segment); |
{ |
free(psem); |
DosCloseMutexSem((*psem).hmtx); |
|
|
return(SEM_FAILED); |
free(nom_absolu); |
} |
free(nom_segment); |
|
free(psem); |
|
|
(*((*psem).nopened))++; |
return(SEM_FAILED); |
|
} |
|
|
DosReleaseMutexSem((*psem).hmtx); |
(*((*psem).nopened))++; |
|
|
semaphore = psem; |
DosReleaseMutexSem((*psem).hmtx); |
|
|
|
semaphore = psem; |
# endif |
# endif |
} |
} |
else |
else |
Line 885 sem_t
|
Line 866 sem_t
|
argument.val = valeur; |
argument.val = valeur; |
semctl((*semaphore).sem, 0, SETVAL, argument); |
semctl((*semaphore).sem, 0, SETVAL, argument); |
# else // OS/2 |
# else // OS/2 |
|
if ((psem = malloc(sizeof(sem_t))) == NULL) |
|
{ |
|
free(nom_absolu); |
|
free(nom_segment); |
|
|
if ((psem = malloc(sizeof(sem_t))) == NULL) |
return(SEM_FAILED); |
{ |
} |
free(nom_absolu); |
|
free(nom_segment); |
|
|
|
return(SEM_FAILED); |
|
} |
|
|
|
(*ptr) = 'M'; |
(*ptr) = 'M'; |
|
|
if (DosCreateMutexSem(nom_absolu, &((*psem).hmtx), 0, 0) != 0) |
if (DosCreateMutexSem(nom_absolu, &((*psem).hmtx), 0, 0) != 0) |
{ |
{ |
free(psem); |
free(psem); |
free(nom_absolu); |
free(nom_absolu); |
free(nom_segment); |
free(nom_segment); |
|
|
return(SEM_FAILED); |
return(SEM_FAILED); |
} |
} |
|
|
(*ptr) = 'S'; |
(*ptr) = 'S'; |
|
|
if (DosCreateEventSem(nom_absolu, &((*psem).hev), 0, |
if (DosCreateEventSem(nom_absolu, &((*psem).hev), 0, |
(valeur != 0) ? 1 : 0) != 0) |
(valeur != 0) ? 1 : 0) != 0) |
{ |
{ |
DosCloseMutexSem((*psem).hmtx); |
DosCloseMutexSem((*psem).hmtx); |
|
|
free(nom_absolu); |
|
free(nom_segment); |
|
free(psem); |
|
|
|
return(SEM_FAILED); |
free(nom_absolu); |
} |
free(nom_segment); |
|
free(psem); |
|
|
if (DosAllocSharedMem(&base, nom_segment, 2 * sizeof(ULONG), |
return(SEM_FAILED); |
PAG_WRITE | PAG_READ | PAG_COMMIT) != 0) |
} |
{ |
|
DosCloseMutexSem((*psem).hmtx); |
|
|
|
free(nom_absolu); |
if (DosAllocSharedMem(&base, nom_segment, 2 * sizeof(ULONG), |
free(nom_segment); |
PAG_WRITE | PAG_READ | PAG_COMMIT) != 0) |
free(psem); |
{ |
|
DosCloseMutexSem((*psem).hmtx); |
|
|
return(SEM_FAILED); |
free(nom_absolu); |
} |
free(nom_segment); |
|
free(psem); |
|
|
free(nom_segment); |
return(SEM_FAILED); |
|
} |
|
|
(*psem).cnt = (ULONG *) base; |
free(nom_segment); |
(*psem).nopened = ((ULONG *) base) + 1; |
|
(*(*psem).cnt) = valeur; |
|
(*(*psem).nopened) = 1; |
|
(*psem).shared = 1; |
|
semaphore = psem; |
|
|
|
|
(*psem).cnt = (ULONG *) base; |
|
(*psem).nopened = ((ULONG *) base) + 1; |
|
(*(*psem).cnt) = valeur; |
|
(*(*psem).nopened) = 1; |
|
(*psem).shared = 1; |
|
semaphore = psem; |
# endif |
# endif |
} |
} |
|
|
Line 963 sem_close_SysV(sem_t *semaphore)
|
Line 942 sem_close_SysV(sem_t *semaphore)
|
|
|
return(0); |
return(0); |
# else |
# else |
|
sem_t *psem; |
|
|
sem_t *psem; |
psem = semaphore; |
|
|
psem = semaphore; |
|
|
|
if (DosCloseMutexSem((*psem).hmtx) != 0) |
if (DosCloseMutexSem((*psem).hmtx) != 0) |
{ |
{ |
return(EINVAL); |
return(EINVAL); |
} |
} |
|
|
while(DosCloseEventSem((*psem).hev) == ERROR_SEM_BUSY) |
while(DosCloseEventSem((*psem).hev) == ERROR_SEM_BUSY) |
{ |
{ |
DosPostEventSem((*psem).hev); |
DosPostEventSem((*psem).hev); |
} |
} |
|
|
(*(*psem).nopened)--; |
(*(*psem).nopened)--; |
|
|
if ((*psem).shared == 0) |
if ((*psem).shared == 0) |
{ |
|
free((*psem).cnt); |
|
free((*psem).nopened); |
|
} |
|
else |
|
{ |
|
if ((*(*psem).nopened) == 0) |
|
{ |
{ |
DosFreeMem((*psem).cnt); |
free((*psem).cnt); |
|
free((*psem).nopened); |
|
} |
|
else |
|
{ |
|
if ((*(*psem).nopened) == 0) |
|
{ |
|
DosFreeMem((*psem).cnt); |
|
} |
} |
} |
} |
|
|
|
if ((*psem).allocated != 0) |
|
{ |
|
free(psem); |
|
} |
|
|
|
return(0); |
if ((*psem).allocated != 0) |
|
{ |
|
free(psem); |
|
} |
|
|
|
return(0); |
# endif |
# endif |
} |
} |
|
|
Line 1008 sem_unlink_SysV(const char *nom)
|
Line 985 sem_unlink_SysV(const char *nom)
|
{ |
{ |
// Détruit un sémaphore nommé créé par sem_open_SysV() |
// Détruit un sémaphore nommé créé par sem_open_SysV() |
# ifndef OS2 // IPCS_SYSV |
# ifndef OS2 // IPCS_SYSV |
semctl(semget(ftok(nom_absolu, 1), 0, 0), 0, IPC_RMID); |
semctl(semget(ftok(nom, 1), 0, 0), 0, IPC_RMID); |
|
|
if (unlink(nom_absolu) == -1) |
if (unlink(nom) == -1) |
{ |
{ |
free(nom_absolu); |
free(nom_absolu); |
return(EACCES); |
return(EACCES); |
} |
} |
|
|
free(nom_absolu); |
free(nom); |
return(0); |
return(0); |
# else |
# else |
|
return(0); |
return(0); |
|
|
|
# endif |
# endif |
} |
} |
|
|