operatingsystem_vms.cpp

来自「Pegasus is an open-source implementation」· C++ 代码 · 共 2,080 行 · 第 1/4 页

CPP
2,080
字号
#endif  //#ifdef  PEGASUS_PLATFORM_VMS_ALPHA_DECCXX                            }				// end while (fgets(record1, sizeof(record1), fptr1))  #ifdef PEGASUS_PLATFORM_VMS_IA64_DECCXX           // no FOE,EOE or MCOE license is existing on the system     // Returning False     bStatus = false;     goto done;#endif }				// end if (fptr1 = fopen(UsageFile, "r"))done:   if (!fptr1 == 0)  {    fclose(fptr1);    fptr1 = 0;  }  if (!fptr2 == 0)  {    fclose(fptr2);    fptr2 = 0;  }  // "if (f$search(\"usage.out\") .nes. \"\") then delete usage.out;*");  strcpy(usage_cmd, "if (f$search(\"");  strcat(usage_cmd, UsageFile);  strcat(usage_cmd, "\") .nes. \"\") then delete ");  strcat(usage_cmd, UsageFile);  strcat(usage_cmd, ";*");  // "if (f$search(\"units.out\") .nes. \"\") then delete units.out;*");  strcpy(units_cmd, "if (f$search(\"");  strcat(units_cmd, UnitsFile);  strcat(units_cmd, "\") .nes. \"\") then delete ");  strcat(units_cmd, UnitsFile);  strcat(units_cmd, ";*");  status = system(usage_cmd);  status = system(units_cmd);  if (UsageFile) {    free(UsageFile);    UsageFile = 0;  }  if (UnitsFile) {    free(UnitsFile);    UnitsFile = 0;  }  return bStatus;}//// ================================================================================// NAME              : getNumberOfUsers// DESCRIPTION       : Number of user sessions.// ASSUMPTIONS       : None// PRE-CONDITIONS    :// POST-CONDITIONS   :// NOTES             :// ================================================================================////Made changes to return only the numbers of interactive users - PTR-73-51-32Boolean OperatingSystem::getNumberOfUsers(Uint32 & numberOfUsers){  int i,    status,    count = 0,    usernamlen;  unsigned long int jpictx;  typedef struct  {    unsigned short wlength;    unsigned short wcode;    void *pbuffer;    void *pretlen;  }  item_list;  item_list itmlst3[2];  char usernamebuf[13];  char *ptr1 = 0;  char username[MAXUSERNAME * 13] = "";  itmlst3[0].wlength = 0;  itmlst3[0].wcode = PSCAN$_MODE;  itmlst3[0].pbuffer = (void *) JPI$K_INTERACTIVE;  itmlst3[0].pretlen = NULL;  itmlst3[1].wlength = 0;  itmlst3[1].wcode = 0;  itmlst3[1].pbuffer = NULL;  itmlst3[1].pretlen = NULL;  status = sys$process_scan(&jpictx, itmlst3);  if (!$VMS_STATUS_SUCCESS(status))  {    return false;  }  itmlst3[0].wlength = 12;  itmlst3[0].wcode = JPI$_USERNAME;  itmlst3[0].pbuffer = usernamebuf;  itmlst3[0].pretlen = &usernamlen;  itmlst3[1].wlength = 0;  itmlst3[1].wcode = 0;  itmlst3[1].pbuffer = NULL;  itmlst3[1].pretlen = NULL;  while (1)  {    status = sys$getjpiw(0, &jpictx, NULL, itmlst3, 0, NULL, 0);    if (status == SS$_NOMOREPROC)    {      break;    }    if (!$VMS_STATUS_SUCCESS(status))    {      return false;    }    usernamebuf[12] = '\0';    for (i = 0; i < MAXUSERNAME; i++)    {      ptr1 = &username[i * 13];      if (!strncmp(usernamebuf, ptr1, 13))      {	break;      }      else if (!strcmp(ptr1, ""))      {	strncpy(ptr1, usernamebuf, 13);	count++;	break;      }    }  }  numberOfUsers = count;  return true;}//// ================================================================================// NAME              : getNumberOfProcesses// DESCRIPTION       : Number of process contexts currently loaded or running.// ASSUMPTIONS       : None// PRE-CONDITIONS    :// POST-CONDITIONS   :// NOTES             : VMS WORLD priviledge is needed for this routine.// ================================================================================//Boolean OperatingSystem::getNumberOfProcesses(Uint32 & numberOfProcesses){  int status,    count = 0,    usernamlen;  unsigned long int jpictx;  typedef struct  {    unsigned short wlength;    unsigned short wcode;    void *pbuffer;    void *pretlen;  }  item_list;  item_list itmlst3[2];  char usernamebuf[13];  itmlst3[0].wlength = 0;  itmlst3[0].wcode = PSCAN$_MODE;  itmlst3[0].pbuffer = (void *) JPI$K_INTERACTIVE;  itmlst3[0].pretlen = NULL;  itmlst3[1].wlength = 0;  itmlst3[1].wcode = 0;  itmlst3[1].pbuffer = NULL;  itmlst3[1].pretlen = NULL;  status = sys$process_scan(&jpictx, itmlst3);  if (!$VMS_STATUS_SUCCESS(status))  {    return false;  }  itmlst3[0].wlength = 12;  itmlst3[0].wcode = JPI$_USERNAME;  itmlst3[0].pbuffer = usernamebuf;  itmlst3[0].pretlen = &usernamlen;  itmlst3[1].wlength = 0;  itmlst3[1].wcode = 0;  itmlst3[1].pbuffer = NULL;  itmlst3[1].pretlen = NULL;  while (1)  {    status = sys$getjpiw(0, &jpictx, NULL, itmlst3, 0, NULL, 0);    if (status == SS$_NOMOREPROC)    {      break;    }    if (!$VMS_STATUS_SUCCESS(status))    {      return false;    }    count++;  }  itmlst3[0].wlength = 0;  itmlst3[0].wcode = PSCAN$_MODE;  itmlst3[0].pbuffer = (void *) JPI$K_OTHER;  itmlst3[0].pretlen = NULL;  itmlst3[1].wlength = 0;  itmlst3[1].wcode = 0;  itmlst3[1].pbuffer = NULL;  itmlst3[1].pretlen = NULL;  status = sys$process_scan(&jpictx, itmlst3);  if (!$VMS_STATUS_SUCCESS(status))  {    return false;  }  itmlst3[0].wlength = 12;  itmlst3[0].wcode = JPI$_USERNAME;  itmlst3[0].pbuffer = usernamebuf;  itmlst3[0].pretlen = &usernamlen;  itmlst3[1].wlength = 0;  itmlst3[1].wcode = 0;  itmlst3[1].pbuffer = NULL;  itmlst3[1].pretlen = NULL;  while (1)  {    status = sys$getjpiw(0, &jpictx, NULL, itmlst3, 0, NULL, 0);    if (status == SS$_NOMOREPROC)    {      break;    }    if (!$VMS_STATUS_SUCCESS(status))    {      return false;    }    count++;  }  itmlst3[0].wlength = 0;  itmlst3[0].wcode = PSCAN$_MODE;  itmlst3[0].pbuffer = (void *) JPI$K_BATCH;  itmlst3[0].pretlen = NULL;  itmlst3[1].wlength = 0;  itmlst3[1].wcode = 0;  itmlst3[1].pbuffer = NULL;  itmlst3[1].pretlen = NULL;  status = sys$process_scan(&jpictx, itmlst3);  if (!$VMS_STATUS_SUCCESS(status))  {    return false;  }  itmlst3[0].wlength = 12;  itmlst3[0].wcode = JPI$_USERNAME;  itmlst3[0].pbuffer = usernamebuf;  itmlst3[0].pretlen = &usernamlen;  itmlst3[1].wlength = 0;  itmlst3[1].wcode = 0;  itmlst3[1].pbuffer = NULL;  itmlst3[1].pretlen = NULL;  while (1)  {    status = sys$getjpiw(0, &jpictx, NULL, itmlst3, 0, NULL, 0);    if (status == SS$_NOMOREPROC)    {      break;    }    if (!$VMS_STATUS_SUCCESS(status))    {      return false;    }    count++;  }  itmlst3[0].wlength = 0;  itmlst3[0].wcode = PSCAN$_MODE;  itmlst3[0].pbuffer = (void *) JPI$K_NETWORK;  itmlst3[0].pretlen = NULL;  itmlst3[1].wlength = 0;  itmlst3[1].wcode = 0;  itmlst3[1].pbuffer = NULL;  itmlst3[1].pretlen = NULL;  status = sys$process_scan(&jpictx, itmlst3);  if (!$VMS_STATUS_SUCCESS(status))  {    return false;  }  itmlst3[0].wlength = 12;  itmlst3[0].wcode = JPI$_USERNAME;  itmlst3[0].pbuffer = usernamebuf;  itmlst3[0].pretlen = &usernamlen;  itmlst3[1].wlength = 0;  itmlst3[1].wcode = 0;  itmlst3[1].pbuffer = NULL;  itmlst3[1].pretlen = NULL;  while (1)  {    status = sys$getjpiw(0, &jpictx, NULL, itmlst3, 0, NULL, 0);    if (status == SS$_NOMOREPROC)    {      break;    }    if (!$VMS_STATUS_SUCCESS(status))    {      return false;    }    count++;  }  numberOfProcesses = count;  return true;}//// ================================================================================// NAME              : getMaxNumberOfProcesses// DESCRIPTION       : Maximum number of process contexts supported.// ASSUMPTIONS       : None// PRE-CONDITIONS    :// POST-CONDITIONS   :// NOTES             :// ================================================================================//Boolean OperatingSystem::getMaxNumberOfProcesses(Uint32 & mMaxProcesses){  int status,    maxprocount;  typedef struct  {    unsigned short wlength;    unsigned short wcode;    void *pbuffer;    void *pretlen;  }  item_list;  item_list itmlst3[2];  itmlst3[0].wlength = sizeof (maxprocount);  itmlst3[0].wcode = SYI$_MAXPROCESSCNT;  itmlst3[0].pbuffer = &maxprocount;  itmlst3[0].pretlen = NULL;  itmlst3[1].wlength = 0;  itmlst3[1].wcode = 0;  itmlst3[1].pbuffer = NULL;  itmlst3[1].pretlen = NULL;  status = sys$getsyiw(0, 0, 0, itmlst3, 0, 0, 0);  if ($VMS_STATUS_SUCCESS(status))  {    mMaxProcesses = maxprocount;    return true;  }  else  {    return false;  }}//// ================================================================================// NAME              : getTotalSwapSpaceSize// DESCRIPTION       : Total system swap space in Kbytes.// ASSUMPTIONS       : None// PRE-CONDITIONS    :// POST-CONDITIONS   :// NOTES             :// ================================================================================//// Added calculation of pagesize using sys$getsyi() -PTR 73-51-22Boolean OperatingSystem::getTotalSwapSpaceSize(Uint64 & mTotalSwapSpaceSize){  int status,    swapsize,pagesize;  typedef struct  {    unsigned short wlength;    unsigned short wcode;    void *pbuffer;    void *pretlen;  }  item_list;  item_list itmlst3[3];  itmlst3[0].wlength = 4;  itmlst3[0].wcode = SYI$_SWAPFILE_PAGE;  itmlst3[0].pbuffer = &swapsize;  itmlst3[0].pretlen = NULL;  itmlst3[1].wlength = 4;  itmlst3[1].wcode = SYI$_PAGE_SIZE;  itmlst3[1].pbuffer = &pagesize;  itmlst3[1].pretlen = NULL;  itmlst3[2].wlength = 0;  itmlst3[2].wcode = 0;  itmlst3[2].pbuffer = NULL;  itmlst3[2].pretlen = NULL;  status = sys$getsyiw(0, 0, 0, itmlst3, 0, 0, 0);   // Pagesize in KB  pagesize = pagesize/1024;  if ($VMS_STATUS_SUCCESS(status))  {    mTotalSwapSpaceSize = swapsize * pagesize;    return true;  }  else  {    return false;  }}//// ================================================================================// NAME              : getTotalVirtualMemorySize// DESCRIPTION       : Number of Kbytes of virtual memory for this process.// ASSUMPTIONS       : None// PRE-CONDITIONS    :// POST-CONDITIONS   :// NOTES             : returns the sum of TotalVisibleMemorySize and SizeStoredInPagingFiles,//                     which would be the total physical memory and total size in pagefile.sys// ================================================================================//Boolean OperatingSystem::getTotalVirtualMemorySize(Uint64 & total){  Uint64 visibleMemory;  Uint64 sizeInPageFile;  if (getTotalVisibleMemorySize(visibleMemory) == false)    return false;  if (getSizeStoredInPagingFiles(sizeInPageFile)  == false)    return false;  total = visibleMemory + sizeInPageFile;   return true;}//// ================================================================================// NAME              : getFreeVirtualMemory// DESCRIPTION       : Number of Kbytes of unused virtual memory for this process.// ASSUMPTIONS       : None// PRE-CONDITIONS    :// POST-CONDITIONS   :// NOTES             : returns the sum of FreePhysicalMemory and FreeSpaceInPagingFiles//                     which would be the free physical memory and free size in pagefile.sys// ================================================================================//Boolean OperatingSystem::getFreeVirtualMemory(Uint64 & freeVirtualMemory){  Uint64 freePhysicalMem;  Uint64 freePageFile;  if (getFreePhysicalMemory(freePhysicalMem) == false)    return false;  if (getFreeSpaceInPagingFiles(freePageFile) == false)    return false;  freeVirtualMemory = freePhysicalMem + freePageFile;  return true;}//// ================================================================================// NAME              : getFreePhysicalMemory// DESCRIPTION       : Number of Kbytes of physical memory unused.// ASSUMPTIONS       : None// PRE-CONDITIONS    :// POST-CONDITIONS   :// NOTES             :// ================================================================================//// Added calculation of pagesize using sys$getsyi() -PTR 73-51-22Boolean OperatingSystem::getFreePhysicalMemory(Uint64 & total){  long status = SS$_NORMAL,    lFreeMem;  int pagesize;    typedef struct  {    unsigned short wlength;    unsigned short wcode;    void *pbuffer;    void *pretlen;  }  item_list;  item_list itmlst3[2];  itmlst3[0].wlength = 4;  itmlst3[0].wcode = SYI$_PAGE_SIZE;  itmlst3[0].pbuffer = &pagesize;  itmlst3[0].pretlen = NULL;  itmlst3[1].wlength = 0;  itmlst3[1].wcode = 0;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?