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 ++++++++++++++++++++++++++++++++
 test/test_sem.cpp   |    0 
 test/CMakeLists.txt |    9 ++++
 3 files changed, 73 insertions(+), 0 deletions(-)

diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index cba8712..8a70cb0 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -70,3 +70,12 @@
                             "${PROJECT_BINARY_DIR}"
                              ${EXTRA_INCLUDES}
                             )
+
+
+
+add_executable(test_sem2 test_sem2.cpp )
+target_link_libraries(test_sem2 PRIVATE  ${EXTRA_LIBS} )
+target_include_directories(test_sem2 PRIVATE
+                            "${PROJECT_BINARY_DIR}"
+                             ${EXTRA_INCLUDES}
+                            )
diff --git a/test/test_sem.c b/test/test_sem.cpp
similarity index 100%
rename from test/test_sem.c
rename to test/test_sem.cpp
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