sigfix.h
上传用户:sddyfurun
上传日期:2007-01-04
资源大小:525k
文件大小:2k
源码类别:

代理服务器

开发平台:

Unix_Linux

  1. /* Copyright (c) 1995,1996,1997 NEC Corporation.  All rights reserved.       */
  2. /*                                                                           */
  3. /* The redistribution, use and modification in source or binary forms of     */
  4. /* this software is subject to the conditions set forth in the copyright     */
  5. /* document ("Copyright") included with this distribution.                   */
  6. /*
  7.  * $Id: sigfix.h,v 1.7.4.1 1997/11/25 23:22:36 wlu Exp $
  8.  */
  9. #ifndef SIGFIX_H
  10. #define SIGFIX_H
  11. typedef RETSIGTYPE (*Sig_t)P((void));
  12. #ifdef HAVE_SIGACTION
  13. typedef sigset_t Sigset_t;
  14. #ifndef DONT_NEED_SIGNAL
  15. static inline Sig_t Signal(int signo, RETSIGTYPE(*func)()) {
  16.     struct sigaction sa, oa;
  17.     sa.sa_flags   = 0;
  18.     sa.sa_handler = func;
  19.     sigemptyset(&sa.sa_mask);
  20.     sigaction(signo, &sa, &oa);
  21.     return (Sig_t)oa.sa_handler;
  22. }
  23. #endif
  24. #ifndef DONT_NEED_SIGBLOCK
  25. static inline Sigset_t SigBlock(int signo) {
  26.     sigset_t set;
  27.     sigemptyset(&set);
  28.     sigaddset(&set, signo);
  29.     sigprocmask(SIG_BLOCK, &set, NULL);
  30.     return set;
  31. }
  32. #endif
  33. #ifndef DONT_NEED_SIGUNBLOCK
  34. static inline void SigUnblock(Sigset_t set) {
  35.     sigprocmask(SIG_UNBLOCK, &set, NULL);
  36. }
  37. #endif
  38. #ifndef DONT_NEED_SIGPAUSE
  39. static inline void SigPause(void) {
  40.     sigset_t set;
  41.     sigemptyset(&set);
  42.     sigsuspend(&set);
  43. }
  44. #endif
  45. #ifndef DONT_NEED_SIGPENDING
  46. static inline int SigPending(int signo) {
  47.     sigset_t set;
  48.     sigemptyset(&set);
  49.     sigpending(&set);
  50.     return sigismember(&set, signo);
  51. }
  52. #endif
  53. #else
  54. typedef int Sigset_t;
  55.        
  56. #ifndef DONT_NEED_SIGNAL
  57. static inline Sig_t Signal(int signo, RETSIGTYPE(*func)()) {
  58.     return (Sig_t)signal(signo, func);
  59. }
  60. #endif
  61. #ifndef DONT_NEED_SIGBLOCK
  62. static inline Sigset_t SigBlock(int signo) {
  63.     return sigblock(signo);
  64. }
  65. #endif
  66. #ifndef DONT_NEED_SIGUNBLOCK
  67. static inline void SigUnblock(Sigset_t mask) {
  68.     sigsetmask(mask);
  69. }
  70. #endif
  71. #ifndef DONT_NEED_SIGPAUSE
  72. static inline void SigPause(void) {
  73.     sigpause(0);
  74. }
  75. #endif
  76. #ifndef DONT_NEED_SIGPENDING
  77. static inline int SigPending(int signo) {
  78.      return 0;
  79. }
  80. #endif
  81. #endif    
  82. #endif