ftp.nice.ch/pub/next/developer/languages/c/gcc.2.7.2.2.I.b.tar.gz#/lib/gcc-lib/i386-next-nextstep3/2.7.2.2.f.2/include/bsd/sys/wait.h

This is wait.h in view mode; [Download] [Up]

/* 
 * Mach Operating System
 * Copyright (c) 1987 Carnegie-Mellon University
 * All rights reserved.  The CMU software License Agreement specifies
 * the terms and conditions for use and redistribution.
 */
/*
 * HISTORY
 *  7-Jan-93  Mac Gillon (mgillon) at NeXT
 *	Integrated POSIX support
 *
 * 29-Apr-92  Peter King (king) at NeXT
 *	Made wait stucture layout be dependant on __BIG_ENDIAN__
 *	__LITTLE_ENDIAN__ predefines.
 *
 * 27-Sep-89  Morris Meyer (mmeyer) at NeXT
 *	NFS 4.0 Changes: define arguments to wait4() system call.
 *
 * 06-Jan-88  Jay Kistler (jjk) at Carnegie Mellon University
 *	Made file reentrant.  Added declarations for __STDC__.
 *
 * 14-Dec-86  Avadis Tevanian (avie) at Carnegie-Mellon University
 *	Merged romp and 68000 definitions since they were the same.
 *	The real conditional should be dependent on byte ordering.
 *
 * 30-May-86  Jonathan J. Chew (jjc) at Carnegie-Mellon University
 *	Added 68000 dependent definitions of w_t and w_S very similar to
 *	those for the ROMP.
 *
 * 19-Feb-86  Bill Bolosky (bolosky) at Carnegie-Mellon University
 *	Added alternate definitions of w_T and w_S for Sailboat under
 *	switch ROMP.
 */
 
/*
 * Copyright (c) 1982, 1986 Regents of the University of California.
 * All rights reserved.  The Berkeley software License Agreement
 * specifies the terms and conditions for redistribution.
 *
 *	@(#)wait.h	7.1 (Berkeley) 6/4/86
 */

#ifndef	_WAIT_
#define	_WAIT_	1

#if	!defined(KERNEL)
	#include <standards.h>
#endif	/* POSIX_KERN */

/*
 * This file holds definitions relevent to the wait system call.
 * Some of the options here are available only through the ``wait3''
 * entry point; the old entry point with one argument has more fixed
 * semantics, never returning status of unstopped children, hanging until
 * a process terminates if any are outstanding, and never returns
 * detailed information about process resource utilization (<vtimes.h>).
 */

#if     defined(_POSIX_SOURCE) && !defined(KERNEL)
	#include <sys/types.h>

	#ifdef __STDC__
		extern pid_t wait(int *stat_loc);
		extern pid_t waitpid(pid_t pid, int *stat_loc,
			int options);
	#else
		extern pid_t wait();
		extern pid_t waitpid();
	#endif /* __STDC__ */

	#define WNOHANG		01	/* dont hang in wait */
	#define WUNTRACED	02	/* tell about stopped, */
					/* untraced children */

	/*
	 * Macros to interpret the argument returned by wait() and
	 * waitpid().
	 */

	/* Evaluates to nonzero if and only if status indicates
	 * stopped child.
	 */
	#define WIFSTOPPED(status)	((status) & 0100)

	/* If WIFSTOPPED(status) is true, then this macro evaluates
	 * to the number of the signal that caused the child to stop.
	 * Otherwise, it evaluates to -1.
	 */
	#define WSTOPSIG(status)	(int)(WIFSTOPPED(status) ? \
				      (((status) >> 8) & 0177) : -1)

	/* Evaluates to nonzero if and only if status indicates
	 * the child terminated normally.
	 */
	#define WIFEXITED(status)	(!((status) & 0377))

	/* If WIFEXITED(status) is true, then this macro evaluates
	 * to the lower order 8 bits of the child's exit status.
	 * Otherwise, it evaluates to -1.
	 */
	#define WEXITSTATUS(status)	(int)(WIFEXITED(status) ? \
					      (((status) >> 8) & 0377) : -1)

	/* Evaluates to nonzero if and only if status indicates
	 * the child terminated abnormally.
	 */
	#define WIFSIGNALED(status)	( !WIFEXITED(status) && \
					  !WIFSTOPPED(status) )

	/* If WIFSIGNALED(status) is true, then this macro evaluates
	 * to the number of the signal that terminated the child.
	 * Otherwise, it evaluates to -1.
	 */
	#define WTERMSIG(status)	(int)(WIFSIGNALED(status) ? \
				      ((status) & 0177) : -1)

#endif 	/* _POSIX_SOURCE  && !KERNEL */

#if	defined(_NEXT_SOURCE) 
/*
 * Structure of the information in the first word returned by both
 * wait and wait3.  If w_stopval==WSTOPPED, then the second structure
 * describes the information returned, else the first.  See WUNTRACED below.
 */
union wait	{
	int	w_status;		/* used in syscall */
	/*
	 * Terminated process status.
	 */
	struct {
#if	__BIG_ENDIAN__
		unsigned short  w_PAD16;
		unsigned        w_Retcode:8;    /* exit code if w_termsig==0 */
 		unsigned        w_Coredump:1;   /* core dump indicator */
 		unsigned        w_Termsig:7;    /* termination signal */
#else
		unsigned short	w_Termsig:7;	/* termination signal */
		unsigned short	w_Coredump:1;	/* core dump indicator */
		unsigned short	w_Retcode:8;	/* exit code if w_termsig==0 */
#endif
	} w_T;
	/*
	 * Stopped process status.  Returned
	 * only for traced children unless requested
	 * with the WUNTRACED option bit.
	 */
	struct {
#if	__BIG_ENDIAN__
		unsigned short  w_PAD16;
 		unsigned        w_Stopsig:8;    /* signal that stopped us */
 		unsigned        w_Stopval:8;    /* == W_STOPPED if stopped */
#else
		unsigned short	w_Stopval:8;	/* == W_STOPPED if stopped */
		unsigned short	w_Stopsig:8;	/* signal that stopped us */
#endif
	} w_S;
};
#define	w_termsig	w_T.w_Termsig
#define w_coredump	w_T.w_Coredump
#define w_retcode	w_T.w_Retcode
#define w_stopval	w_S.w_Stopval
#define w_stopsig	w_S.w_Stopsig


#define	WSTOPPED	0177	/* value of s.stopval if process is stopped */

#if	!defined(_POSIX_SOURCE) || POSIX_KERN

	/*
	 * Option bits for the second argument of wait3.  WNOHANG causes the
	 * wait to not hang if there are no stopped or terminated processes, 
	 * rather returning an error indication in this case (pid==0).  
	 * WUNTRACED indicates that the caller should receive status about
	 * untraced children which stop due to signals.  If children are
	 * stopped and a wait without this option is done, it is as though
	 * they were still running... nothing about them is returned.
	 */
#define WNOHANG		1	/* dont hang in wait */
#define WUNTRACED	2	/* tell about stopped, untraced children */

#define WIFSTOPPED(x)	((x).w_stopval == WSTOPPED)
#define WIFSIGNALED(x)	((x).w_stopval != WSTOPPED && (x).w_termsig != 0)
#define WIFEXITED(x)	((x).w_stopval != WSTOPPED && (x).w_termsig == 0)

#if	defined(__STDC__) && !defined(KERNEL)
	#import <sys/resource.h>
	extern int wait(union wait *);
#endif	/* __STDC__ && ! KERNEL*/

#endif	/* !_POSIX_SOURCE  || POSIX_KERN */

#ifndef KERNEL
	#import <sys/resource.h>

	#ifdef __STDC__
		extern int wait3(union wait *, int,
			struct rusage *);
	#else
		extern int wait3();
	#endif /* __STDC__ */	
#endif /* !KERNEL */
#endif /* _NEXT_SOURCE */

/* SUN_VFS */
#ifdef	KERNEL
	/* 
	 * Arguments to wait4() system call, included here so it may
	 * be called by other routines in the kernel 
	 */
	struct wait4_args {
		int pid;
		union wait *status;
		int options;
		struct rusage *rusage;
	};
#endif
/* end SUN_VFS */
#endif

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.