diff --git a/Documentation/NuttxUserGuide.html b/Documentation/NuttxUserGuide.html index 917b52559f..c2d65d00d1 100644 --- a/Documentation/NuttxUserGuide.html +++ b/Documentation/NuttxUserGuide.html @@ -13,7 +13,7 @@
User's Manual
by
Gregory Nutt
-
Last Updated: November 29, 2014
+Last Updated: April 9, 2015
@@ -4487,14 +4487,19 @@ interface of the same name.+Function Prototype: +
+ #include <signal.h> + int sigignore(int signo); ++ +
+Description: The sigignore() function will set the disposition of signo to SIG_IGN.
+
+Input Parameters: +
signo. The signal number to act on
++Returned Value: +
ERROR) is returned with the errno set appropriately. The errno value of EINVAL, for example, would indicate that signo argument is not a valid signal number.
++Function Prototype: +
+ #include <signal.h> + void (*sigset(int signo, void (*disp)(int)))(int); ++ +
+Description:
+ The sigset() function will modify signal dispositions.
+ The signo argument specifies the signal.
+ The disp argument specifies the signal's disposition, which may be SIG_DFL, SIG_IGN, or the address of a signal handler.
+ If disp is the address of a signal handler, the system will add signo to the calling process' signal mask before executing the signal handler; when the signal handler returns, the system will restore the calling process' signal mask to its state prior to the delivery of the signal.
+ signo will be removed from the calling process' signal mask.
+
+ NOTE: The value SIG_HOLD for disp is not currently supported.
+
+Input Parameters: +
signo. The signal number to operate on
+disp. The new disposition of the signal
++Returned Value: +
sigset() will the previous disposition of the signal.
+Otherwise, SIG_ERR will be returned and errno set to indicate the error.
+
Function Prototype:
@@ -4779,7 +4842,55 @@ pointed to by the set input parameter.
POSIX Compatibility: Comparable to the POSIX
interface of the same name.
-
+Function Prototype: +
+ #include <signal.h> + int sighold(int signo); ++ +
+Description: The sighold() function will add signo to the calling process' signal mask
+
+Input Parameters: +
signo. Identifies the signal to be blocked.
++Returned Value: +
ERROR) is returned with the errno set appropriately. The errno value of EINVAL, for example, would indicate that signo argument is not a valid signal number.
++Function Prototype: +
+ #include <signal.h> + int sigrelse(int signo); ++ +
+Description: The sighold() function will remove signo from the calling process' signal mask
+
+Input Parameters: +
signo. Identifies the signal to be unblocked.
++Returned Value: +
ERROR) is returned with the errno set appropriately. The errno value of EINVAL, for example, would indicate that signo argument is not a valid signal number.
+Function Prototype: @@ -4817,7 +4928,7 @@ is delivered more than once." POSIX Compatibility: Comparable to the POSIX interface of the same name. -
Function Prototype: @@ -4865,7 +4976,30 @@ function or to terminate the task." Only delivery of the signal is required in the present implementation (even if the signal is ignored). -
+Function Prototype: +
+ #include <signal.h> + int sigpause(int signo); ++ +
+Description: The sigpause()) function will remove signo) from the calling process' signal mask and suspend the calling process until a signal is received.
+The sigpause()) function will restore the process' signal mask to its original state before returning.
+
+Input Parameters: +
set. Identifies the signal to be unblocked while waiting.
++Returned Value: +
sigpause always returns -1 (ERROR). On a successful wait for a signal, the errno will be set to EINTR.
+Function Prototype: @@ -4894,10 +5028,9 @@ with a NULL timeout parameter. (see below).
Assumptions/Limitations:
- POSIX Compatibility: Comparable to the POSIX -interface of the same name. + POSIX Compatibility: Comparable to the POSIX interface of the same name. -
Function Prototype: @@ -4963,7 +5096,7 @@ that the unblocked signal be caught; the task will be resumed even if the unblocked signal is ignored. -
Function Prototype: @@ -5020,7 +5153,7 @@ There is no null signal in the present implementation; a zero signal will be sent. -
Function Prototype: @@ -5076,7 +5209,7 @@ be sent.
Function Prototype:
diff --git a/include/signal.h b/include/signal.h
index 8dd86705a2..59baf16a55 100644
--- a/include/signal.h
+++ b/include/signal.h
@@ -165,11 +165,17 @@
#define SIGEV_NONE 0 /* No notification desired */
#define SIGEV_SIGNAL 1 /* Notify via signal */
-/* Special values of sigaction (all treated like NULL) */
+/* Special values of of sa_handler used by sigaction and sigset. There are all
+ * treated like NULL for now.
+ *
+ * REVISIT: Need to distinguish the value of SIG_HOLD. It is need in the
+ * implementation of sigset().
+ */
#define SIG_ERR ((CODE void*)-1)
#define SIG_DFL ((CODE void*)0)
#define SIG_IGN ((CODE void*)0)
+#define SIG_HOLD ((CODE void*)0)
/********************************************************************************
* Global Type Declarations
@@ -262,6 +268,7 @@ int sigdelset(FAR sigset_t *set, int signo);
int sigismember(FAR const sigset_t *set, int signo);
int sigaction(int sig, FAR const struct sigaction *act,
FAR struct sigaction *oact);
+void (*sigset(int signo, void (*disp)(int)))(int);
int sigignore(int signo);
int sigprocmask(int how, FAR const sigset_t *set, FAR sigset_t *oset);
int sigpause(int signo);
diff --git a/libc/signal/Make.defs b/libc/signal/Make.defs
index b79cca478c..7be0ba02e6 100644
--- a/libc/signal/Make.defs
+++ b/libc/signal/Make.defs
@@ -39,6 +39,7 @@ ifneq ($(CONFIG_DISABLE_SIGNALS),y)
CSRCS += sig_emptyset.c sig_fillset.c sig_addset.c sig_delset.c
CSRCS += sig_ismember.c sig_hold.c sig_relse.c sig_ignore.c sig_pause.c
+CSRCS += sig_set.c
# Add the signal directory to the build
diff --git a/libc/signal/sig_set.c b/libc/signal/sig_set.c
new file mode 100644
index 0000000000..c5f01f5823
--- /dev/null
+++ b/libc/signal/sig_set.c
@@ -0,0 +1,127 @@
+/****************************************************************************
+ * libc/signal/sig_set.c
+ *
+ * Copyright (C) 2015 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt