wait.h
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. #ifndef _SYS_WAIT_H_
  2. #define _SYS_WAIT_H_
  3. #include <ansi_compat.h>
  4. #include <sys/cdefs.h>
  5. #if !defined(_POSIX_SOURCE)
  6. union wait {
  7. #else
  8. union __wait {
  9. #endif /* !defined(_POSIX_SOURCE) */
  10. #ifdef __vax
  11. int w_status; /* used in syscall */
  12. #endif /* __vax */
  13. #ifdef __mips__
  14. unsigned int w_status; /* used in syscall */
  15. #endif /* __mips */
  16. /*
  17.  * Terminated process status.
  18.  */
  19. struct {
  20. #ifdef __vax
  21. unsigned short w_Termsig:7; /* termination signal */
  22. unsigned short w_Coredump:1; /* core dump indicator */
  23. unsigned short w_Retcode:8; /* exit code if w_termsig==0 */
  24. #endif /* __vax */
  25. #ifdef __mips__
  26. #ifdef __MIPSEL__
  27. unsigned int w_Termsig:7; /* termination signal */
  28. unsigned int w_Coredump:1; /* core dump indicator */
  29. unsigned int w_Retcode:8; /* exit code if w_termsig==0 */
  30. unsigned int w_Filler:16; /* pad to word boundary */
  31. #endif /* __MIPSEL */
  32. #ifdef __MIPSEB__
  33. unsigned int w_Filler:16; /* pad to word boundary */
  34. unsigned int w_Retcode:8; /* exit code if w_termsig==0 */
  35. unsigned int w_Coredump:1; /* core dump indicator */
  36. unsigned int w_Termsig:7; /* termination signal */
  37. #endif /* __MIPSEB */
  38. #endif /* __mips */
  39. } w_T;
  40. /*
  41.  * Stopped process status.  Returned
  42.  * only for traced children unless requested
  43.  * with the WUNTRACED option bit.
  44.  */
  45. struct {
  46. #ifdef __vax
  47. unsigned short w_Stopval:8; /* == W_STOPPED if stopped */
  48. unsigned short w_Stopsig:8; /* signal that stopped us */
  49. #endif /* __vax */
  50. #ifdef __mips__
  51. #ifdef __MIPSEL__
  52. unsigned int w_Stopval:8; /* == W_STOPPED if stopped */
  53. unsigned int w_Stopsig:8; /* signal that stopped us */
  54. unsigned int w_Filler:16; /* pad to word boundary */
  55. #endif /* __MIPSEL */
  56. #ifdef __MIPSEB__
  57. unsigned int w_Filler:16; /* pad to word boundary */
  58. unsigned int w_Stopsig:8; /* signal that stopped us */
  59. unsigned int w_Stopval:8; /* == W_STOPPED if stopped */
  60. #endif /* __MIPSEB */
  61. #endif /* __mips */
  62. } w_S;
  63. };
  64. #if !defined(_POSIX_SOURCE)
  65. #define w_termsig w_T.w_Termsig
  66. #define w_coredump w_T.w_Coredump
  67. #define w_retcode w_T.w_Retcode
  68. #define w_stopval w_S.w_Stopval
  69. #define w_stopsig w_S.w_Stopsig
  70. #define WSTOPPED 0177 /* value of s.stopval if process is stopped */
  71. #endif /* !defined(_POSIX_SOURCE) */
  72. #ifdef  WSTOPPED
  73. #define _WSTOPPED WSTOPPED
  74. #else
  75. #define _WSTOPPED 0177
  76. #endif
  77. /*
  78.  * Option bits for the second argument of wait3.  WNOHANG causes the
  79.  * wait to not hang if there are no stopped or terminated processes, rather
  80.  * returning an error indication in this case (pid==0).  WUNTRACED
  81.  * indicates that the caller should receive status about untraced children
  82.  * which stop due to signals.  If children are stopped and a wait without
  83.  * this option is done, it is as though they were still running... nothing
  84.  * about them is returned.
  85.  */
  86. #define WNOHANG 1 /* dont hang in wait */
  87. #define WUNTRACED 2 /* tell about stopped, untraced children */
  88. /*
  89.  * Must cast as union wait * because POSIX defines the input to these macros
  90.  * as int.
  91.  */
  92. #ifdef _POSIX_SOURCE
  93. #define WIFSTOPPED(x) (((union __wait *)&(x))->w_S.w_Stopval == _WSTOPPED)
  94. #define WIFSIGNALED(x) (((union __wait *)&(x))->w_S.w_Stopval != _WSTOPPED && ((union __wait *)&(x))->w_T.w_Termsig != 0)
  95. #define WIFEXITED(x) (((union __wait *)&(x))->w_S.w_Stopval != _WSTOPPED && ((union __wait *)&(x))->w_T.w_Termsig == 0)
  96. #define WEXITSTATUS(x) (((union __wait *)&(x))->w_T.w_Retcode)
  97. #define WTERMSIG(x) (((union __wait *)&(x))->w_T.w_Termsig)
  98. #define WSTOPSIG(x) (((union __wait *)&(x))->w_S.w_Stopsig)
  99. #endif /* _POSIX_SOURCE */
  100. #if !defined(_POSIX_SOURCE)
  101. #define WIFSTOPPED(x) (((union wait *)&(x))->w_stopval == WSTOPPED)
  102. #define WIFSIGNALED(x) (((union wait *)&(x))->w_stopval != WSTOPPED && ((union wait *)&(x))->w_termsig != 0)
  103. #define WIFEXITED(x) (((union wait *)&(x))->w_stopval != WSTOPPED && ((union wait *)&(x))->w_termsig == 0)
  104. #define WEXITSTATUS(x) (((union wait *)&(x))->w_retcode)
  105. #define WTERMSIG(x) (((union wait *)&(x))->w_termsig)
  106. #define WSTOPSIG(x) (((union wait *)&(x))->w_stopsig)
  107. #endif /* !defined(_POSIX_SOURCE) */
  108. pid_t wait  __P_((int *));
  109. pid_t waitpid  __P_((pid_t, int *, int));
  110. #endif /* _SYS_WAIT_H_ */