diff options
Diffstat (limited to 'nuttx/include')
-rw-r--r-- | nuttx/include/nuttx/sched.h | 6 | ||||
-rw-r--r-- | nuttx/include/sys/types.h | 6 | ||||
-rw-r--r-- | nuttx/include/sys/wait.h | 118 |
3 files changed, 129 insertions, 1 deletions
diff --git a/nuttx/include/nuttx/sched.h b/nuttx/include/nuttx/sched.h index 027d00489..c5e061cb6 100644 --- a/nuttx/include/nuttx/sched.h +++ b/nuttx/include/nuttx/sched.h @@ -1,7 +1,7 @@ /******************************************************************************** * nuttx/sched.h * - * Copyright (C) 2007-2010 Gregory Nutt. All rights reserved. + * Copyright (C) 2007-2011 Gregory Nutt. All rights reserved. * Author: Gregory Nutt <spudmonkey@racsa.co.cr> * * Redistribution and use in source and binary forms, with or without @@ -178,6 +178,10 @@ struct _TCB start_t start; /* Thread start function */ entry_t entry; /* Entry Point into the thread */ exitfunc_t exitfunc; /* Called if exit is called. */ +#ifdef CONFIG_SCHED_WAITPID /* Experimental */ + sem_t exitsem; /* Support for waitpid */ + int *stat_loc; /* Location to return exit status */ +#endif uint8_t sched_priority; /* Current priority of the thread */ #ifdef CONFIG_PRIORITY_INHERITANCE # if CONFIG_SEM_NNESTPRIO > 0 diff --git a/nuttx/include/sys/types.h b/nuttx/include/sys/types.h index 4be7d3527..736d2fb75 100644 --- a/nuttx/include/sys/types.h +++ b/nuttx/include/sys/types.h @@ -152,6 +152,12 @@ typedef uint16_t ino_t; typedef int pid_t; +/* id_t is a general identifier that can be used to contain at least a pid_t, + * uid_t, or gid_t. + */ + +typedef unsigned int id_t; + /* blkcnt_t and off_t are signed integer types. * * blkcnt_t is used for file block counts. diff --git a/nuttx/include/sys/wait.h b/nuttx/include/sys/wait.h new file mode 100644 index 000000000..559b922f3 --- /dev/null +++ b/nuttx/include/sys/wait.h @@ -0,0 +1,118 @@ +/**************************************************************************** + * include/sys/wait.h + * + * Copyright (C) 2011 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <spudmonkey@racsa.co.cr> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#ifndef __INCLUDE_SYS_WAIT_H +#define __INCLUDE_SYS_WAIT_H + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include <sys/types.h> +#include <signal.h> + +#ifdef CONFIG_SCHED_WAITPID + +/**************************************************************************** + * Pre-Processor Definitions + ****************************************************************************/ + +/* The following are provided for analysis of returned status values. + * Encoded is as follows as 2 bytes of info(MS) then two bytes of code (LS). + * Code: + * 0 - Child has exited, info is the exit code. + * Other values - Not implemented + */ + +#define WEXITSTATUS(s) (((s) >> 8) & 0xff)/* Return exit status */ + +#define WIFEXITED(s) (((s) & 0xff) == 0) /* True: Child exited normally */ +#define WIFCONTINUED(s) (false) /* True: Child has been continued */ +#define WIFSIGNALED(s) (false) /* True: Child exited due to uncaught signal */ +#define WIFSTOPPED(s) (false) /* True: Child is currently stopped */ +#define WSTOPSIG(s) (false) /* Return signal number that caused process to stop */ +#define WTERMSIG(s) (false) /* Return signal number that caused process to terminate */ + +/* The following symbolic constants are possible values for the options + * argument to waitpi(1) (1) and/or waitid() (2), + */ + +#define WCONTINUED (1 << 0) /* Status for child that has been continued (1)(2) */ +#define WNOHANG (1 << 1) /* Do not wait if status not available (1) */ +#define WUNTRACED (1 << 2) /* Report status of stopped child process (1) */ + +#define WEXITED (1 << 3) /* Wait for processes that have exited (2) */ +#define WSTOPPED (1 << 4) /* Status for child stopped on signal (2) */ +#define WNOHANG (1 << 5) /* Return immediately if there are no children (2) */ +#define WNOWAIT (1 << 6) /* Keep the process in a waitable state (2) */ + +/**************************************************************************** + * Public Type Definitions + ****************************************************************************/ + +#ifndef __ASSEMBLY__ + +enum idtype_e +{ + P_PID = 1, + P_GID = 2, + P_ALL = 3 +}; +typedef enum idtype_e idtype_t; + +/**************************************************************************** + * Public Function Prototypes + ****************************************************************************/ + +#undef EXTERN +#if defined(__cplusplus) +#define EXTERN extern "C" +extern "C" { +#else +#define EXTERN extern +#endif + +EXTERN pid_t wait(int *stat_loc); +EXTERN int waitid(idtype_t idtype, id_t id, siginfo_t *siginfo, int options); +EXTERN pid_t waitpid(pid_t pid, int *stat_loc, int options); + +#undef EXTERN +#if defined(__cplusplus) +} +#endif + +#endif /* __ASSEMBLY__ */ +#endif /* CONFIG_SCHED_WAITPID */ +#endif /* __INCLUDE_SYS_WAIT_H */ |