Ignore:
Timestamp:
Nov 8, 2004, 10:57:37 AM (21 years ago)
Author:
bird
Message:

Having a go at waitid (and waitpid()/wait()).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/emx/include/sys/wait.h

    • Property cvs2svn:cvs-rev changed from 1.4 to 1.5
    r1626 r1627  
    1 /* sys/wait.h (emx+gcc) */
     1/*-
     2 * Copyright (c) 1982, 1986, 1989, 1993, 1994
     3 *      The Regents of the University of California.  All rights reserved.
     4 *
     5 * Redistribution and use in source and binary forms, with or without
     6 * modification, are permitted provided that the following conditions
     7 * are met:
     8 * 1. Redistributions of source code must retain the above copyright
     9 *    notice, this list of conditions and the following disclaimer.
     10 * 2. Redistributions in binary form must reproduce the above copyright
     11 *    notice, this list of conditions and the following disclaimer in the
     12 *    documentation and/or other materials provided with the distribution.
     13 * 4. Neither the name of the University nor the names of its contributors
     14 *    may be used to endorse or promote products derived from this software
     15 *    without specific prior written permission.
     16 *
     17 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     20 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     27 * SUCH DAMAGE.
     28 *
     29 *      @(#)wait.h      8.2 (Berkeley) 7/10/94
     30 * $FreeBSD: src/sys/sys/wait.h,v 1.20 2004/04/09 13:14:32 bde Exp $
     31 */
    232
    3 #ifndef _SYS_WAIT_H
    4 #define _SYS_WAIT_H
     33#ifndef _SYS_WAIT_H_
     34#define _SYS_WAIT_H_
    535
    6 #if defined (__cplusplus)
    7 extern "C" {
     36#include <sys/cdefs.h>
     37
     38/*
     39 * This file holds definitions relevant to the wait4 system call and the
     40 * alternate interfaces that use it (wait, wait3, waitpid).
     41 */
     42
     43/*
     44 * Macros to test the exit status returned by wait and extract the relevant
     45 * values.
     46 */
     47#if __BSD_VISIBLE
     48#define _W_INT(w)       (*(int *)&(w))  /* Convert union wait to int. */
     49#define WCOREFLAG       0200
     50#else
     51#define _W_INT(i)       (i)
    852#endif
    953
    10 #define WNOHANG         1
    11 #define WUNTRACED       2
     54#define _WSTATUS(x)     (_W_INT(x) & 0177)
     55#define _WSTOPPED       0177            /* _WSTATUS if process is stopped */
     56#define WIFSTOPPED(x)   (_WSTATUS(x) == _WSTOPPED)
     57#define WSTOPSIG(x)     (_W_INT(x) >> 8)
     58#define WIFSIGNALED(x)  (_WSTATUS(x) != _WSTOPPED && _WSTATUS(x) != 0)
     59#define WTERMSIG(x)     (_WSTATUS(x))
     60#define WIFEXITED(x)    (_WSTATUS(x) == 0)
     61#define WEXITSTATUS(x)  (_W_INT(x) >> 8)
     62#define WIFCONTINUED(x) (x == 0x13)     /* 0x13 == SIGCONT */
     63#if __BSD_VISIBLE
     64#define WCOREDUMP(x)    (_W_INT(x) & WCOREFLAG)
    1265
    13 #define WIFEXITED(st)   (((st) & 0x7f) == 0)
    14 #define WIFSIGNALED(st) (((st) & 0x7f) != 0x7f && ((st) & 0x7f) != 0)
    15 #define WIFSTOPPED(st)  (((st) & 0x7f) == 0x7f)
    16 
    17 #define WEXITSTATUS(st) ((st) >> 8)
    18 #define WTERMSIG(st)    ((st) & 0x7f)
    19 #define WSTOPSIG(st)    ((st) >> 8)
    20 
    21 int wait (int *);
    22 int waitpid (int, int *, int);
    23 
    24 #if !defined (_POSIX_SOURCE) || defined (_WITH_UNDERSCORE) || defined(__USE_EMX)
    25 
    26 int _wait (int *);
    27 int _waitpid (int, int *, int);
    28 
     66#define W_EXITCODE(ret, sig)    ((ret) << 8 | (sig))
     67#define W_STOPCODE(sig)         ((sig) << 8 | _WSTOPPED)
    2968#endif
    3069
    31 #if defined (__cplusplus)
    32 }
     70/*
     71 * Option bits for the third argument of wait4.  WNOHANG causes the
     72 * wait to not hang if there are no stopped or terminated processes, rather
     73 * returning an error indication in this case (pid==0).  WUNTRACED
     74 * indicates that the caller should receive status about untraced children
     75 * which stop due to signals.  If children are stopped and a wait without
     76 * this option is done, it is as though they were still running... nothing
     77 * about them is returned.
     78 */
     79#define WNOHANG         1       /* Don't hang in wait. */
     80#define WUNTRACED       2       /* Tell about stopped, untraced children. */
     81#define WCONTINUED      4       /* Report a job control continued process. */
     82
     83#if 0 /* bird: old __BSD_VISIBLE */
     84#define WLINUXCLONE 0x80000000  /* Wait for kthread spawned from linux_clone. */
    3385#endif
    3486
    35 #endif /* not SYS_WAIT_H */
     87/*
     88 * Tokens for special values of the "pid" parameter to wait4.
     89 */
     90#if __BSD_VISIBLE
     91#define WAIT_ANY        (-1)    /* any process */
     92#define WAIT_MYPGRP     0       /* any process in my process group */
     93#endif /* __BSD_VISIBLE */
     94
     95#ifdef _KERNEL
     96struct rusage;
     97int     kern_wait(struct thread *td, pid_t pid, int *status, int options,
     98            struct rusage *rup);
     99#else /* !_KERNEL */
     100#include <sys/types.h>
     101
     102__BEGIN_DECLS
     103pid_t   wait(int *);
     104pid_t   waitpid(pid_t, int *, int);
     105#if 0 /* bird: old __BSD_VISIBLE */
     106struct rusage;
     107pid_t   wait3(int *, int, struct rusage *);
     108pid_t   wait4(pid_t, int *, int, struct rusage *);
     109#endif
     110
     111
     112/*
     113 * bird: LIBC additions - start.
     114 */
     115#if __XSI_VISIBLE
     116#include <signal.h>
     117
     118/** Wait for processes that have exited. */
     119#define WEXITED         8
     120/** Wait for processes that have stopped. */
     121#define WSTOPPED       16
     122/** Keep the wait state around for later wait calls, i.e. just peek at the stuff. */
     123#define WNOWAIT        32
     124
     125/* The following values are used by the `waitid' function.  */
     126typedef enum
     127{
     128    /** Wait for any child process. */
     129    P_ALL,
     130    /** Wait for a specific process. */
     131    P_PID,
     132    /** Wait for processes of a process group. */
     133    P_PGID
     134} idtype_t;
     135
     136int     waitid(idtype_t, id_t, siginfo_t *, int);
     137#endif /* __XSI_VISIBLE */
     138
     139/*
     140 * bird: LIBC additions - end.
     141 */
     142
     143__END_DECLS
     144#endif /* _KERNEL */
     145
     146#endif /* !_SYS_WAIT_H_ */
Note: See TracChangeset for help on using the changeset viewer.