From 3414a407f12677845087571c59713182a9b21d05 Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期五, 26 二月 2021 14:25:13 +0800 Subject: [PATCH] update --- test/test_sem2.cpp | 64 ++++++++++++++++++++++++++++++++ 1 files changed, 64 insertions(+), 0 deletions(-) diff --git a/test/test_sem2.cpp b/test/test_sem2.cpp new file mode 100644 index 0000000..c1b2e10 --- /dev/null +++ b/test/test_sem2.cpp @@ -0,0 +1,64 @@ +#include <unistd.h> +#include <stdio.h> +#include <stdlib.h> +#include <semaphore.h> +#include <time.h> +#include <assert.h> +#include <errno.h> +#include <signal.h> + +sem_t sem; + +#define handle_error(msg) \ + do { perror(msg); exit(EXIT_FAILURE); } while (0) + +static void +handler(int sig) +{ + puts("sig handler\n"); + // write(STDOUT_FILENO, "sem_post() from handler\n", 24); + // if (sem_post(&sem) == -1) + // { + // write(STDERR_FILENO, "sem_post() failed\n", 18); + // _exit(EXIT_FAILURE); + // } +} + +int +main(int argc, char *argv[]) +{ + struct sigaction sa; + struct timespec ts; + int s; + + + + + if (sem_init(&sem, 0, 0) == -1) + handle_error("sem_init"); + + /* Establish SIGALRM handler; set alarm timer using argv[1] */ + + sa.sa_handler = handler; + sigemptyset(&sa.sa_mask); + sa.sa_flags = 0; + if (sigaction(SIGINT, &sa, NULL) == -1) + handle_error("sigaction"); + + + + /* Calculate relative interval as current time plus + number of seconds given argv[2] */ + + if (clock_gettime(CLOCK_REALTIME, &ts) == -1) + handle_error("clock_gettime"); + + ts.tv_sec += atoi(argv[2]); + + printf("main() about to call sem_wait()\n"); + while ((s = sem_wait(&sem)) == -1 ) + printf("%d , %d\n", errno, errno == EINTR); + + + +} -- Gitblit v1.8.0