mmslist.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #include <ndb_common.h>
  14. #include <NdbOut.hpp>
  15. #include <NdbMain.h>
  16. #include <ose.h>
  17. #include <mms.sig>
  18. #include <mms_err.h>
  19. #include <NdbOut.hpp>
  20. /**
  21.  * NOTE: To use NdbMem from a OSE system ose_mms has to be defined 
  22.  * as a "Required External Process"(see OSE Kernel User's Guide/R1.1(p. 148)),
  23.  * like this:
  24.  * EXT_PROC(ose_mms, ose_mms, 50000)
  25.  * This will create a global variable ose_mms_ that is used from here.
  26.  */
  27. union SIGNAL
  28. {
  29.   SIGSELECT                       sigNo;
  30.   struct MmsListDomainRequest     mmsListDomainRequest;
  31.   struct MmsListDomainReply       mmsListDomainReply;
  32. }; /* union SIGNAL */
  33. extern PROCESS ose_mms_;
  34. struct ARegion
  35. {
  36.    unsigned long int address;
  37.    unsigned long int size;
  38.    char name[32];
  39.    U32         resident;            /* Boolean, nonzero if resident. */
  40.    U32         access;              /* See values for AccessType (above) .*/
  41.    U32         type;                /* either RAM-mem (1) or Io-mem (2) */
  42.    U32         cache;               /* 0-copyback,1-writethrough, 2-CacheInhibit.*/
  43. };
  44. NDB_COMMAND(mmslist, "mmslist", "mmslist", "LIst the MMS memory segments", 4096){
  45.   if (argc == 1){
  46.   static SIGSELECT   allocate_sig[]  = {1,MMS_LIST_DOMAIN_REPLY};
  47.   union SIGNAL           *sig;
  48.   /* Send request to list all segments and regions. */
  49.   sig = alloc(sizeof(struct MmsListDomainRequest),
  50.               MMS_LIST_DOMAIN_REQUEST);
  51.   send(&sig, ose_mms_);
  52.   while (true){
  53.     sig = receive(allocate_sig);    
  54.     if (sig != NIL){
  55.       if (sig->mmsListDomainReply.status == MMS_SUCCESS){
  56. /* Print domain info */
  57. ndbout << "=================================" << endl;
  58. ndbout << "domain: " << sig->mmsListDomainReply.domain << endl;
  59. ndbout << "name  : " << sig->mmsListDomainReply.name << endl;
  60. ndbout << "used  : " << sig->mmsListDomainReply.used << endl;
  61. ndbout << "lock  : " << sig->mmsListDomainReply.lock << endl;
  62. ndbout << "numOfRegions:" << sig->mmsListDomainReply.numOfRegions << endl;
  63. struct ARegion * tmp = (struct ARegion*)&sig->mmsListDomainReply.regions[0];
  64. for (int i = 0; i < sig->mmsListDomainReply.numOfRegions && i < 256; i++){   
  65.   ndbout << i << ": adress=" << tmp->address <<
  66.             ", size=" << tmp->size <<
  67.     ", name=" <<  tmp->name << 
  68.     ", resident=" <<  tmp->resident << 
  69.     ", access=" <<  tmp->access << 
  70.     ", type=" <<  tmp->type << 
  71.             ", cache=" << tmp->cache << endl;
  72.   tmp++;
  73. }
  74. free_buf(&sig);
  75.       }else{
  76. free_buf(&sig);
  77. break;
  78.       }
  79.     }
  80.     
  81.   }
  82.   }else{
  83.     ndbout << "Usage: mmslist" << endl;
  84.   }
  85.   return NULL;
  86. }