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