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