semPxShow.c
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:3k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* semPxShow.c - POSIX semaphore show library */
  2. /* Copyright 1984-1998 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. modification history
  6. --------------------
  7. 01i,17mar99,jdi  doc: updated w/ info about proj facility (SPR 25727).
  8. 01h,05oct98,jmp  doc: replaced INCLUDE_SHOW_RTNS by INCLUDE_SHOW_ROUTINES.
  9. 01g,19jan95,jdi  doc tweaks.
  10. 01f,03feb94,kdl  changed show format.
  11. 01e,01feb94,dvs  documentation tweaks.
  12. 01d,21jan94,kdl  minor changes to display labels.
  13. 01c,05jan94,kdl  changed sem_t "close" field to "refCnt"; general cleanup.
  14. 01b,17dec93,dvs  changed semClassId to semPxClassId
  15. 01a,16jun93,smb  created.
  16. */
  17. /*
  18. DESCRIPTION
  19. This library provides a show routine for POSIX semaphore objects.
  20. */
  21. #include "vxWorks.h"
  22. #include "semPxShow.h"
  23. #include "semaphore.h"
  24. #include "stdio.h"
  25. #include "sys/types.h"
  26. #include "taskLib.h"
  27. #include "classLib.h"
  28. #include "private/objLibP.h"
  29. #include "private/stdioP.h"
  30. #include "private/semPxLibP.h"
  31. /******************************************************************************
  32. *
  33. * semPxShowInit - initialize the POSIX semaphore show facility
  34. *
  35. * This routine links the POSIX semaphore show routine into the VxWorks system.
  36. * It is called automatically when the this show facility is
  37. * configured into VxWorks using either of the following methods:
  38. * .iP
  39. * If you use the configuration header files, define
  40. * INCLUDE_SHOW_ROUTINES in config.h.
  41. * .iP
  42. * If you use the Tornado project facility, select INCLUDE_POSIX_SEM_SHOW.
  43. *
  44. * RETURNS: OK, or ERROR if an error occurs installing the file pointer 
  45. * show routine.
  46. */
  47. STATUS semPxShowInit (void)
  48.     {
  49.     classShowConnect (semPxClassId, (FUNCPTR)semPxShow);
  50.     return (OK);
  51.     }
  52. /*******************************************************************************
  53. *
  54. * semPxShow - display semaphore internals
  55. *
  56. * NOMANUAL
  57. */
  58. STATUS semPxShow
  59.     (
  60.     sem_t * semDesc,
  61.     int level
  62.     )
  63.     {
  64.     int  sval;
  65.     if (OBJ_VERIFY (semDesc, semPxClassId) != OK)
  66. {
  67.         return (ERROR);                         /* invalid file pointer */
  68. }
  69.     if (semDesc->sem_name != NULL) /* if a named semaphore */
  70. {
  71.      printf ("%-32s: %-10sn", "Semaphore name", semDesc->sem_name);
  72.      printf ("%-32s: %-10dn", "sem_open() count", semDesc->refCnt);
  73. }
  74.     sem_getvalue (semDesc, &sval);
  75.     if (sval >= 0)
  76. {
  77.         printf ("%-32s: %-10dn", "Semaphore value", sval);
  78. }
  79.     else
  80. {
  81. /* tell the user the value is zero */
  82.         printf ("%-32s: %-10dn", "Semaphore value", 0);
  83.         printf ("%-32s: %-10dn", "No. of blocked tasks", -(sval));
  84. }
  85.     printf ("n");
  86.     /* someday display the buffer contents with level >= 1 */
  87.     return (OK);
  88.     }