Mac でセマフォを使用しようとしていますが、開いているセマフォを閉じようとするとエラーが発生します。すべての初期化は成功しましたが、2 番目のセマフォを閉じようとしたときに、不正なファイル記述子エラーが返されました。
以下のコードは、open と close のラッパーです。
void init_sem(sem_t * s, char * sema_name, int value)
{
if((s = sem_open(sema_name, O_CREAT, 0644, value)) == SEM_FAILED)
{
perror("sem_open");
exit(1);
}
printf("init semaphore %s\n", sema_name);
}
void destroy_sem(sem_t * s, char * sema_name)
{
printf("destroying, %s\n", sema_name);
if (sem_close(s) == -1) {
perror("sem_close");
exit(EXIT_FAILURE);
}
if (sem_unlink(sema_name) == -1) {
perror("sem_unlink");
exit(EXIT_FAILURE);
}
}
そしてmain.cで
sem_t * s, *a, *b;
init_sem(s, "/cs", 0);
init_sem(a, "/ps", 0);
init_sem(b, "/bs", 0);
destroy_sem(s, "/cs");
destroy_sem(a, "/ps"); //got error here
destroy_sem(b, "/bs");
なぜそれが機能しないのですか?