/* mqPxShow.c - POSIX message queue show */ /* * Copyright (c) 1993-1996, 1999, 2003-2004, 2006, 2007, 2010 * Wind River Systems, Inc. * * The right to copy, distribute or otherwise make use of this software * may be licensed only pursuant to the terms of an applicable Wind River * license agreement. */ /* modification history -------------------- 01j,20apr10,jpb Updated classShowConnect typecast. 01i,06sep07,mfj documentation fix for apigen 01h,21apr06,kk publish mqPxShow() since show() no longer works on POSIX msgQs 01g,11feb04,m_s fixed man page warnings 01f,26jun03,ymz changed name obtain method (objCore moved to msq_que). 01e,17mar99,jdi doc: updated w/ info about proj facility (SPR 25727). 01d,19aug96,dbt modified test of name in mqPxShow (fixed SPR #4228). 01c,19jan95,jdi doc cleanup. 01c,03feb94,dvs changed show format; added include of private/mqPxLibP.h. 01b,01feb94,dvs documentation tweaks. 01a,16jun93,smb created. */ /* DESCRIPTION This library provides a show routine for display information on POSIX message queue objects. The information displayed is for debugging purposes and is intended to be a snapshot of the system at the time the call is made. INCLUDE FILES: mqPxShow.h */ #include #include #include #include #include #include #include #include #include #include /******************************************************************************* * * mqPxShow - display message queue internals * * This routine displays information on a POSIX message queue. * * RETURNS: OK or ERROR if the descriptor is invalid. * * ERRNO: * \is * \i S_objLib_OBJ_ID_ERROR * message queue is invalid. * \ie */ STATUS mqPxShow ( mqd_t mqDesc, int level ) { struct mq_attr attr; char * name; char pString[128]; int flags = 0; pString[0] = EOS; if (OBJ_VERIFY (mqDesc->f_data, mqClassId) != OK) { return (ERROR); } if (mq_getattr(mqDesc, &attr) != 0) return (ERROR); name = objNamePtrGet (mqDesc->f_data); printf ("%-32s: %s\n", "Message queue name", (name == NULL) ? "" : name); printf ("%-32s: %-10d\n", "No. of messages in queue", attr.mq_curmsgs); printf ("%-32s: %-10d\n", "Maximum no. of messages", attr.mq_maxmsg); printf ("%-32s: %-10d\n", "Maximum message size", attr.mq_msgsize); /* now parse the flags for the msgQ */ if ((mqDesc->f_flag & (MQ_FLAG_READ | MQ_FLAG_WRITE)) == (MQ_FLAG_READ | MQ_FLAG_WRITE)) { strcat (pString, "O_RDWR "); flags = O_RDWR; } else if (mqDesc->f_flag & MQ_FLAG_READ) { strcat (pString, "O_RDONLY "); flags = O_RDONLY; } else if (mqDesc->f_flag & MQ_FLAG_WRITE) { strcat (pString, "O_WRONLY "); flags = O_WRONLY; } if (mqDesc->f_flag & MQ_FLAG_NONBLOCK) { strcat (pString, "O_NONBLOCK "); flags |= O_NONBLOCK; } printf ("%-32s: %s (0x%-10x)\n", "Flags", pString, flags); printf ("\n"); /* someday display the buffer contents with level >= 1 */ return (OK); } /****************************************************************************** * * mqPxShowInit - initialize the POSIX message queue show facility * * This routine links the POSIX message queue show routine into the VxWorks * system. It is called automatically when this show facility is configured * into VxWorks using either of the following methods: * \is * \i If you use the configuration header files, define INCLUDE_SHOW_ROUTINES. * \i If you use the project facility, select INCLUDE_POSIX_MQ_SHOW. * \ie * * RETURNS: OK always * * ERRNO: N/A * */ STATUS mqPxShowInit (void) { classShowConnect (mqClassId, (OBJ_SHOW_FUNC) mqPxShow); return (OK); }