00001 #include "defs.h"
00002 #include <semaphore.h>
00003
00004 #define SEMFILE "/testsem"
00005
00006 int main(void)
00007 {
00008 sem_t *sem;
00009 pid_t pid;
00010 int val, i;
00011
00012 (void)sem_unlink(SEMFILE);
00013 ec_cmp( sem = sem_open(SEMFILE, O_CREAT, 0666, 5), SEM_FAILED )
00014 if ((pid = fork()) == 0) {
00015 while (true) {
00016 printf("child waiting...\n");
00017 ec_neg1( sem_wait(sem) )
00018 ec_neg1( sem_getvalue(sem, &val) )
00019 printf("child got semaphore; value = %d\n", val);
00020 }
00021 }
00022 printf("parent ready for post loop\n");
00023 for (i = 0; i < 3; i++) {
00024 ec_neg1( sem_post(sem) )
00025 sleep(1);
00026 }
00027 kill(pid, SIGKILL);
00028 waitpid(pid, NULL, 0);
00029 printf("parent done\n");
00030 exit(EXIT_SUCCESS);
00031
00032 EC_CLEANUP_BGN
00033 exit(EXIT_FAILURE);
00034 EC_CLEANUP_END
00035 }