From b27f910cadbd5138a37b1e5203a1daeb27a0aa7b Mon Sep 17 00:00:00 2001 From: XzcUbuntu <1121743758@qq.com> Date: Tue, 23 May 2023 22:01:23 +0800 Subject: [PATCH] =?UTF-8?q?[libc][posix][signal]=20=E5=A2=9E=E5=8A=A0posix?= =?UTF-8?q?=5Fsignal.c=E9=83=A8=E5=88=86=E5=87=BD=E6=95=B0=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/libc/posix/signal/posix_signal.c | 51 ++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/components/libc/posix/signal/posix_signal.c b/components/libc/posix/signal/posix_signal.c index c87bc6104f..04b3b104f1 100644 --- a/components/libc/posix/signal/posix_signal.c +++ b/components/libc/posix/signal/posix_signal.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2021, RT-Thread Development Team + * Copyright (c) 2006-2023, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * @@ -23,6 +23,28 @@ void (*signal(int sig, void (*func)(int))) (int) return rt_signal_install(sig, func); } +/** + * @brief This function will examines, changes, or examines and changes the signal mask of the calling thread. + * + * @param how indicates the way in which the existing set of blocked signals should be changed. + * The following are the possible values for option: + * + * SIG_BLOCK The set of blocked signals is the union of the current set and the set argument. + * + * SIG_UNBLOCK The signals in set are removed from the current set of blocked signals. + * It is permissible to attempt to unblock a signal which is not blocked. + * + * SIG_SETMASK The set of blocked signals is set to the argument set. + * + * @param set is a pointer to a sigset_t object that specifies the new set of blocked signals. + * If set is NULL, then the signal mask is unchanged (i.e., how is ignored) + * + * @param oset is a pointer to a sigset_t object that is used to return the previous set of blocked signals. + * If oset is non-NULL, the previous value of the signal mask is stored in it. + * + * @return Returns 0 on success. + */ + int sigprocmask (int how, const sigset_t *set, sigset_t *oset) { rt_base_t level; @@ -55,6 +77,14 @@ int sigprocmask (int how, const sigset_t *set, sigset_t *oset) return 0; } +/** + * @brief This function will examines the signal mask of the calling thread. + * + * @param set is a pointer to a sigset_t object that is used to return the previous set of blocked signals. + * If set is non-NULL, the previous value of the signal mask is stored in it. + * + * @return Returns 0 on success. + */ int sigpending (sigset_t *set) { sigprocmask(SIG_SETMASK, RT_NULL, set); @@ -84,6 +114,18 @@ int sigsuspend (const sigset_t *set) return ret; } +/** + * @brief This function will install or confirm action for specified signal. + * + * @param signum is the signal to be handled. + * + * @param act is the new signal action, or NULL to restore default action. + * + * @param oldact returns the previous signal action, or NULL if not required. + * + * @return Returns 0 on success or -1 on failure. + */ + int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact) { rt_sighandler_t old = RT_NULL; @@ -136,6 +178,13 @@ int sigwaitinfo(const sigset_t *set, siginfo_t *info) return sigtimedwait(set, info, NULL); } +/** + * @brief This function willsend a signal to the caller + * + * @param sig is the signal that is to be sent. + * + * @return Returns 0 on success. + */ int raise(int sig) { rt_thread_kill(rt_thread_self(), sig);