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 + -
显示快捷键?