Loading [MathJax]/jax/output/HTML-CSS/config.js
The Gaudi Framework  v28r2p1 (f1a77ff4)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
System Namespace Reference

Note: OS specific details for environment resolution. More...

Classes

struct  IO_COUNTERS
 Process I/O Counters NtQueryInformationProcess using ProcessIoCounters. More...
 
struct  KERNEL_USER_TIMES
 Process/Thread System and User Time NtQueryInformationProcess using ProcessTimes NtQueryInformationThread using ThreadTimes. More...
 
class  PathResolver
 
struct  POOLED_USAGE_AND_LIMITS
 Process Pooled Quota Usage and Limits NtQueryInformationProcess using ProcessPooledUsageAndLimits. More...
 
struct  PROCESS_BASIC_INFORMATION
 
class  ProcessDescriptor
 Provides access to process information. More...
 
class  ProcessTime
 Simple class to hold the time information of a process. More...
 
struct  QUOTA_LIMITS
 Process Quotas NtQueryInformationProcess using ProcessQuotaLimits NtQueryInformationProcess using ProcessPooledQuotaLimits NtSetInformationProcess using ProcessQuotaLimits. More...
 
struct  VM_COUNTERS
 Process Virtual Memory Counters NtQueryInformationProcess using ProcessVmCounters. More...
 

Typedefs

typedef void * ImageHandle
 Definition of an image handle. More...
 
typedef void * ProcessHandle
 Definition of the process handle. More...
 
typedef unsigned long(* EntryPoint) (const unsigned long iid, void **ppvObject)
 Definition of the "generic" DLL entry point function. More...
 
typedef void *(* Creator) ()
 Definition of the "generic" DLL entry point function. More...
 
typedef void * ThreadHandle
 A Thread handle. More...
 
typedef struct _PEB * PPEB
 Basic Process Information NtQueryInformationProcess using ProcessBasicInfo. More...
 

Enumerations

enum  MemoryUnit {
  Byte, kByte, MByte, GByte,
  TByte, PByte, EByte
}
 Unit of memory. More...
 
enum  ModuleType { UNKNOWN, SHAREDLIB, EXECUTABLE }
 
enum  InfoType {
  NoFetch, RemainTime, Times, ProcessBasics,
  PriorityBoost, Memory, Quota, System,
  Modules, IO
}
 Enumeration for fetching information. More...
 
enum  TimeType {
  Year, Month, Day, Hour,
  Min, Sec, milliSec, microSec,
  nanoSec, Native
}
 Time type for conversion. More...
 
enum  PR_file_type { PR_regular_file, PR_directory }
 
enum  PR_search_type { PR_local, PR_recursive }
 
enum  ProcessInfoCommand {
  ProcessBasicInformation, ProcessQuotaLimits, ProcessIoCounters, ProcessVmCounters,
  ProcessTimes, ProcessBasePriority, ProcessRaisePriority, ProcessDebugPort,
  ProcessExceptionPort, ProcessAccessToken, ProcessLdtInformation, ProcessLdtSize,
  ProcessDefaultHardErrorMode, ProcessIoPortHandlers, ProcessPooledUsageAndLimits, ProcessWorkingSetWatch,
  ProcessUserModeIOPL, ProcessEnableAlignmentFaultFixup, ProcessPriorityClass, ProcessWx86Information,
  ProcessHandleCount, ProcessAffinityMask, ProcessPriorityBoost, MaxProcessInfoClass,
  ProcessEllapsedTime
}
 

Functions

GAUDI_API long breakExecution ()
 Break the execution of the application and invoke the debugger. More...
 
GAUDI_API long breakExecution (long pid)
 Break the execution of the application and invoke the debugger in a remote process. More...
 
GAUDI_API std::string homeDirectory ()
 
GAUDI_API std::string tempDirectory ()
 
GAUDI_API StatusCode resolveEnv (const std::string &var, std::string &res, int recusions=124)
 
GAUDI_API long adjustMemory (MemoryUnit typ, long value)
 Convert time from kByte to requested representation (Experts only) More...
 
GAUDI_API long procID ()
 Basic Process Information: Process ID. More...
 
GAUDI_API long parentID (InfoType fetch=ProcessBasics, long pid=-1)
 Basic Process Information: Parent's process ID. More...
 
GAUDI_API long affinityMask (InfoType fetch=ProcessBasics, long pid=-1)
 Basic Process Information: Affinity mask. More...
 
GAUDI_API long exitStatus (InfoType fetch=ProcessBasics, long pid=-1)
 Basic Process Information: Exit status (does not really make sense for the running process, but for others!) More...
 
GAUDI_API long basePriority (InfoType fetch=ProcessBasics, long pid=-1)
 Basic Process Information: Base priority. More...
 
GAUDI_API long priorityBoost (InfoType fetch=PriorityBoost, long pid=-1)
 Basic Process Information: priority boost. More...
 
GAUDI_API long numPageFault (InfoType fetch=Memory, long pid=-1)
 Basic Process Information: Number of page faults. More...
 
GAUDI_API long pagefileUsage (MemoryUnit unit=kByte, InfoType fetch=Memory, long pid=-1)
 Basic Process Information: Current page file usage. More...
 
GAUDI_API long pagefileUsagePeak (MemoryUnit unit=kByte, InfoType fetch=Memory, long pid=-1)
 Basic Process Information: Peak usage of page file. More...
 
GAUDI_API long pagefileUsageLimit (MemoryUnit unit=kByte, InfoType fetch=Quota, long pid=-1)
 Basic Process Information: Peak usage of page file. More...
 
GAUDI_API long nonPagedMemory (MemoryUnit unit=kByte, InfoType fetch=Memory, long pid=-1)
 Basic Process Information: Current usage of non paged memory. More...
 
GAUDI_API long nonPagedMemoryPeak (MemoryUnit unit=kByte, InfoType fetch=Memory, long pid=-1)
 Basic Process Information: Peak usage of non paged memory. More...
 
GAUDI_API long nonPagedMemoryLimit (MemoryUnit unit=kByte, InfoType fetch=Quota, long pid=-1)
 System Process Limits: Maximum amount of non-paged memory this process is allowed to use. More...
 
GAUDI_API long pagedMemory (MemoryUnit unit=kByte, InfoType fetch=Memory, long pid=-1)
 Basic Process Information: Amount of paged memory currently occupied by the process 'pid'. More...
 
GAUDI_API long pagedMemoryPeak (MemoryUnit unit=kByte, InfoType fetch=Memory, long pid=-1)
 Basic Process Information: Maximum of paged memory occupied by the process 'pid'. More...
 
GAUDI_API long pagedMemoryLimit (MemoryUnit unit=kByte, InfoType fetch=Quota, long pid=-1)
 Basic Process Information: Amount of paged memory that can be occupied by the process 'pid'. More...
 
GAUDI_API long minMemoryLimit (MemoryUnit unit=kByte, InfoType fetch=Quota, long pid=-1)
 System Process Limits: Minimum amount of virtual memory this process may use. More...
 
GAUDI_API long maxMemoryLimit (MemoryUnit unit=kByte, InfoType fetch=Quota, long pid=-1)
 System Process Limits: Maximum amount of virtual memory this process is allowed to use. More...
 
GAUDI_API long mappedMemory (MemoryUnit unit=kByte, InfoType fetch=Memory, long pid=-1)
 Basic Process Information: priority boost. More...
 
GAUDI_API long mappedMemoryPeak (MemoryUnit unit=kByte, InfoType fetch=Memory, long pid=-1)
 Basic Process Information: priority boost. More...
 
GAUDI_API long virtualMemory (MemoryUnit unit=kByte, InfoType fetch=Memory, long pid=-1)
 Basic Process Information: priority boost. More...
 
GAUDI_API long virtualMemoryPeak (MemoryUnit unit=kByte, InfoType fetch=Memory, long pid=-1)
 Basic Process Information: priority boost. More...
 
GAUDI_API long virtualMemoryLimit (MemoryUnit unit=kByte, InfoType fetch=Quota, long pid=-1)
 System Process Limits: Maximum amount of the page file this process is allowed to use. More...
 
GAUDI_API const std::stringmoduleName ()
 Get the name of the (executable/DLL) file without file-type. More...
 
GAUDI_API const std::stringmoduleNameFull ()
 Get the full name of the (executable/DLL) file. More...
 
GAUDI_API ModuleType moduleType ()
 Get type of the module. More...
 
GAUDI_API ProcessHandle processHandle ()
 Handle to running process. More...
 
GAUDI_API ImageHandle moduleHandle ()
 Handle to currently executed module. More...
 
GAUDI_API ImageHandle exeHandle ()
 Handle to the executable file running. More...
 
GAUDI_API const std::stringexeName ()
 Name of the executable file running. More...
 
GAUDI_API const std::vector< std::stringlinkedModules ()
 Vector of names of linked modules. More...
 
GAUDI_API void setModuleHandle (ImageHandle handle)
 Attach module handle. More...
 
GAUDI_API std::string PathResolverFindXMLFile (const std::string &logical_file_name)
 
GAUDI_API std::string PathResolverFindDataFile (const std::string &logical_file_name)
 
GAUDI_API unsigned long loadDynamicLib (const std::string &name, ImageHandle *handle)
 Load dynamic link library. More...
 
GAUDI_API unsigned long unloadDynamicLib (ImageHandle handle)
 unload dynamic link library More...
 
GAUDI_API unsigned long getProcedureByName (ImageHandle handle, const std::string &name, EntryPoint *pFunction)
 Get a specific function defined in the DLL. More...
 
GAUDI_API unsigned long getProcedureByName (ImageHandle handle, const std::string &name, Creator *pFunction)
 Get a specific function defined in the DLL. More...
 
GAUDI_API unsigned long getLastError ()
 Get last system known error. More...
 
GAUDI_API const std::string getLastErrorString ()
 Get last system error as string. More...
 
GAUDI_API const std::string getErrorString (unsigned long error)
 Retrieve error code as string for a given error. More...
 
GAUDI_API const std::string typeinfoName (const std::type_info &)
 Get platform independent information about the class type. More...
 
GAUDI_API const std::string typeinfoName (const char *)
 
GAUDI_API const std::stringhostName ()
 Host name. More...
 
GAUDI_API const std::stringosName ()
 OS name. More...
 
GAUDI_API const std::stringosVersion ()
 OS version. More...
 
GAUDI_API const std::stringmachineType ()
 Machine type. More...
 
GAUDI_API int instructionsetLevel ()
 Instruction Set "Level". More...
 
GAUDI_API const std::stringaccountName ()
 User login name. More...
 
GAUDI_API long numCmdLineArgs ()
 Number of arguments passed to the commandline. More...
 
GAUDI_API long argc ()
 Number of arguments passed to the commandline (==numCmdLineArgs()); just to match argv call... More...
 
GAUDI_API const std::vector< std::stringcmdLineArgs ()
 Command line arguments including executable name as arg[0] as vector of strings. More...
 
GAUDI_API char ** argv ()
 char** command line arguments including executable name as arg[0]; You may not modify them! More...
 
GAUDI_API std::string getEnv (const char *var)
 get a particular environment variable (returning "UNKNOWN" if not set) More...
 
GAUDI_API bool getEnv (const char *var, std::string &value)
 get a particular environment variable, storing the value in the passed string if the variable is set. More...
 
bool getEnv (const std::string &var, std::string &value)
 
GAUDI_API std::vector< std::stringgetEnv ()
 get all environment variables More...
 
GAUDI_API int setEnv (const std::string &name, const std::string &value, int overwrite=1)
 Set an environment variables. More...
 
GAUDI_API bool isEnvSet (const char *var)
 Check if an environment variable is set or not. More...
 
ThreadHandle threadSelf ()
 thread handle "accessor" More...
 
GAUDI_API int backTrace (void **addresses, const int depth)
 
GAUDI_API bool backTrace (std::string &btrace, const int depth, const int offset=0)
 
GAUDI_API bool getStackLevel (void *addresses, void *&addr, std::string &fnc, std::string &lib)
 
GAUDI_API longlong adjustTime (TimeType typ, longlong timevalue)
 Convert time from OS native time to requested representation (Experts only) More...
 
template<TimeType T>
long long adjustTime (long long timevalue)
 Convert the time from OS native time to requested representation (Experts only) More...
 
GAUDI_API longlong ellapsedTime (TimeType typ=milliSec, InfoType fetch=Times, long pid=-1)
 Elapsed time since start of process in milliseconds. More...
 
GAUDI_API longlong kernelTime (TimeType typ=milliSec, InfoType fetch=Times, long pid=-1)
 CPU kernel mode time of process in milliseconds. More...
 
GAUDI_API longlong userTime (TimeType typ=milliSec, InfoType fetch=Times, long pid=-1)
 CPU user mode time of process in milliseconds. More...
 
GAUDI_API longlong cpuTime (TimeType typ=milliSec, InfoType fetch=Times, long pid=-1)
 Consumed CPU time of process in milliseconds. More...
 
GAUDI_API longlong remainingTime (TimeType typ=milliSec, InfoType fetch=Quota, long pid=-1)
 Maximum processing time left for this process. More...
 
GAUDI_API longlong creationTime (TimeType typ=milliSec, InfoType fetch=Times, long pid=-1)
 Process Creation time. More...
 
GAUDI_API longlong systemStart (TimeType typ=Sec)
 Maximum processing time left for this process. More...
 
GAUDI_API longlong upTime (TimeType typ=Hour)
 Maximum processing time left for this process. More...
 
template<TimeType T>
GAUDI_API longlong currentTime ()
 Retrieve absolute system time. More...
 
GAUDI_API longlong currentTime (TimeType typ=milliSec)
 Get current time in specificed units. More...
 
GAUDI_API longlong tickCount ()
 Retrieve the number of ticks since system startup. More...
 
GAUDI_API ProcessTime getProcessTime (long pid=-1)
 Retrieve the process time data for a process. More...
 
template<>
long long adjustTime< Year > (long long t)
 
template<>
long long adjustTime< Day > (long long t)
 
template<>
long long adjustTime< Hour > (long long t)
 
template<>
long long adjustTime< Min > (long long t)
 
template<>
long long adjustTime< Sec > (long long t)
 
template<>
long long adjustTime< milliSec > (long long t)
 
template<>
long long adjustTime< microSec > (long long t)
 
template<>
long long adjustTime< nanoSec > (long long t)
 
template<>
long long adjustTime< Month > (long long t)
 
template<>
long long adjustTime< Native > (long long t)
 
template<TimeType T>
longlong currentTime ()
 Retrieve absolute system time. More...
 
template longlong currentTime< Year > ()
 
template longlong currentTime< Month > ()
 
template longlong currentTime< Day > ()
 
template longlong currentTime< Hour > ()
 
template longlong currentTime< Min > ()
 
template longlong currentTime< Sec > ()
 
template longlong currentTime< milliSec > ()
 
template longlong currentTime< microSec > ()
 
template longlong currentTime< nanoSec > ()
 
template longlong currentTime< Native > ()
 
ProcessDescriptorgetProcess ()
 Retrieve Process structure. More...
 

Detailed Description

Note: OS specific details for environment resolution.

Note: OS specific details for process timing.

Note: OS specific details as well as Gaudi details may not occur in this definition file, because this header is the used by both, the OS specific implementations and the gaudi specific implementation.

ModuleInfo: OS specific details to access at run-time the module configuration of the process.

Note: OS specific details for memory usage.

Entrypoints:

Author
: M.Frank
Version
: 1.0

Entrypoints:

  • basePriority Base priority
  • procID Process ID
  • parentID Parent's process ID
  • affinityMask Affinity mask
  • exitStatus Exit status
  • priorityBoost Priority boost
  • numPageFault Number of page faults
  • pagefileUsage Current page file usage
  • pagefileUsagePeak Peak usage of page file
  • nonPagedMemory Current usage of non paged memory
  • nonPagedMemoryPeak Peak usage of non paged memory
  • nonPagedMemoryLimit Maximum amount of non-paged memory this process is allowed to use
  • pagedMemory Amount of paged memory currently occupied
  • pagedMemoryPeak Maximum of paged memory occupied by the process
  • pagedMemoryLimit paged memory that can be occupied by the process
  • memorySize Size of currently occupied memory
  • memorySizePeak Maximum memory occupied by the process
  • memoryLimit Amount of memory that can be occupied by the process
  • virtualMemorySize Virtual memory size currenly occupied
  • peakVirtualMemorySize Maximum amount of virtual memory occupied
  • virtualMemoryLimit Amount of virtual memory that can be occupied by the process
  • minMemoryLimit Minimum amount of virtual memory this process may use
  • maxMemoryLimit Maximum amount of virtual memory this process is allowed to use
  • mappedMemorySize Currenly mapped virtual memory size
  • mappedMemorySizePeak Peak mapped virtual memory size
Author
: M.Frank
Version
: 1.0

M.Frank

Since e.g. IID is defined in both, this would lead automatically to complete comilation failures.....

Author
M.Frank

Entrypoints:

  • remainingTime returns the time the process could still execute
  • ellapsedTime: returns elapsed time since program start
  • kernelTime: returns the amount of time the process has spent in kernel mode
  • userTime: returns the amount of time the process has spent in user mode
  • cpuTime: returns kernel+user time

On Windows NT Time is expressed as the amount of time that has elapsed since midnight on January 1, 1601 at Greenwich, England.

On Unix time is expressed as the amount of time that has elapsed since midnight on January 1, 1970 at Greenwich, England.

History :

+---------+----------------------------------------------+--------+
|    Date |                 Comment                      | Who    |
+---------+----------------------------------------------+--------+
| 11/11/00| Initial version.                             | MF     |
+---------+----------------------------------------------+--------+
Author
: M.Frank
Version
: 1.0

Typedef Documentation

typedef void*(* System::Creator) ()

Definition of the "generic" DLL entry point function.

Definition at line 37 of file System.h.

typedef unsigned long(* System::EntryPoint) (const unsigned long iid, void **ppvObject)

Definition of the "generic" DLL entry point function.

Definition at line 35 of file System.h.

typedef void * System::ImageHandle

Definition of an image handle.

Definition at line 30 of file ModuleInfo.h.

typedef struct _PEB* System::PPEB

Basic Process Information NtQueryInformationProcess using ProcessBasicInfo.

Definition at line 17 of file ProcessDescriptor.h.

typedef void * System::ProcessHandle

Definition of the process handle.

Definition at line 32 of file ModuleInfo.h.

typedef void* System::ThreadHandle

A Thread handle.

Definition at line 110 of file System.h.

Enumeration Type Documentation

Enumeration for fetching information.

Enumerator
NoFetch 
RemainTime 
Times 
ProcessBasics 
PriorityBoost 
Memory 
Quota 
System 
Modules 
IO 

Definition at line 18 of file SystemBase.h.

Unit of memory.

Enumerator
Byte 
kByte 
MByte 
GByte 
TByte 
PByte 
EByte 

Definition at line 56 of file Memory.h.

Enumerator
UNKNOWN 
SHAREDLIB 
EXECUTABLE 

Definition at line 28 of file ModuleInfo.h.

Enumerator
PR_regular_file 
PR_directory 

Definition at line 35 of file PathResolver.cpp.

Enumerator
PR_local 
PR_recursive 

Definition at line 40 of file PathResolver.cpp.

Enumerator
ProcessBasicInformation 
ProcessQuotaLimits 
ProcessIoCounters 
ProcessVmCounters 
ProcessTimes 
ProcessBasePriority 
ProcessRaisePriority 
ProcessDebugPort 
ProcessExceptionPort 
ProcessAccessToken 
ProcessLdtInformation 
ProcessLdtSize 
ProcessDefaultHardErrorMode 
ProcessIoPortHandlers 
ProcessPooledUsageAndLimits 
ProcessWorkingSetWatch 
ProcessUserModeIOPL 
ProcessEnableAlignmentFaultFixup 
ProcessPriorityClass 
ProcessWx86Information 
ProcessHandleCount 
ProcessAffinityMask 
ProcessPriorityBoost 
MaxProcessInfoClass 
ProcessEllapsedTime 

Definition at line 22 of file ProcessDescriptor.cpp.

22  {
36  ProcessIoPortHandlers, // Note: this is kernel mode only
48  };

Time type for conversion.

Enumerator
Year 
Month 
Day 
Hour 
Min 
Sec 
milliSec 
microSec 
nanoSec 
Native 

Definition at line 57 of file Timing.h.

Function Documentation

const std::string & System::accountName ( )

User login name.

Definition at line 444 of file System.cpp.

444  {
445  static std::string account = "";
446  if ( account == "" ) {
447 #ifdef _WIN32
448  char buffer[512];
449  unsigned long buflen = sizeof(buffer);
450  ::GetUserName(buffer, &buflen);
451  account = buffer;
452 #else
453  const char* acct = ::getlogin();
454  if ( !acct ) acct = ::getenv("LOGNAME");
455  if ( !acct ) acct = ::getenv("USER");
456  account = (acct) ? acct : "Unknown";
457 #endif
458  }
459  return account;
460 }
STL class.
long System::adjustMemory ( MemoryUnit  typ,
long  value 
)

Convert time from kByte to requested representation (Experts only)

Convert requested memory value from kByte to requested value.

Definition at line 34 of file Memory.cpp.

34  {
35  if ( value != -1 ) {
36  switch ( unit ) {
37  case Byte: break;
38  case kByte: value = value/1024; break;
39  case MByte: value = (value/1024)/1024; break;
40  case GByte: value = ((value/1024)/1024)/1024; break;
41  case TByte: value = (((value/1024)/1024)/1024)/1024; break;
42  case PByte: value = ((((value/1024)/1024)/1024)/1024)/1024; break;
43  case EByte: value = (((((value/1024)/1024)/1024)/1024)/1024)/1024; break;
44  default: value = -1; break;
45  }
46  }
47  return value;
48 }
longlong System::adjustTime ( TimeType  typ,
longlong  timevalue 
)

Convert time from OS native time to requested representation (Experts only)

unfortunately "-ansi" flag turn off the correct definition of CLK_TCK and forces it to be equal CLOCKS_PER_SEC, it is wrong!

t /= CLOCKS_PER_SEC; // needs division by clock tick unit

Definition at line 37 of file Timing.cpp.

37  {
38  if ( t != -1 ) {
39 #ifndef _WIN32
40  // t /= CLK_TCK ; // needs division by clock tick unit
45 
47 #endif
48  switch( typ ) {
49  case Year : return adjustTime<Year >(t);
50  case Month : return adjustTime<Month >(t);
51  case Day : return adjustTime<Day >(t);
52  case Hour : return adjustTime<Hour >(t);
53  case Min : return adjustTime<Min >(t);
54  case Sec : return adjustTime<Sec >(t);
55  case milliSec: return adjustTime<milliSec>(t);
56  case microSec: return adjustTime<microSec>(t);
57  case nanoSec : return adjustTime<nanoSec >(t);
58  case Native : return adjustTime<Native >(t);
59  }
60  }
61  return t;
62 }
long long adjustTime< Native >(long long t)
Definition: Timing.h:239
long long adjustTime< nanoSec >(long long t)
Definition: Timing.h:231
long long adjustTime< milliSec >(long long t)
Definition: Timing.h:223
long long adjustTime< microSec >(long long t)
Definition: Timing.h:227
template<TimeType T>
long long System::adjustTime ( long long  timevalue)
inline

Convert the time from OS native time to requested representation (Experts only)

template<>
long long System::adjustTime< Day > ( long long  t)
inline

Definition at line 207 of file Timing.h.

207  {
208  return (t==-1) ? t : t /= (1LL * 24 * 60 * 60 * 1000 * 1000 * 10);
209  }
template<>
long long System::adjustTime< Hour > ( long long  t)
inline

Definition at line 211 of file Timing.h.

211  {
212  return (t==-1) ? t : t /= (1LL * 60 * 60 * 1000 * 1000 * 10);
213  }
template<>
long long System::adjustTime< microSec > ( long long  t)
inline

Definition at line 227 of file Timing.h.

227  {
228  return (t==-1) ? t : t /= (10LL);
229  }
template<>
long long System::adjustTime< milliSec > ( long long  t)
inline

Definition at line 223 of file Timing.h.

223  {
224  return (t==-1) ? t : t /= (1000 * 10);
225  }
template<>
long long System::adjustTime< Min > ( long long  t)
inline

Definition at line 215 of file Timing.h.

215  {
216  return (t==-1) ? t : t /= (60 * 1000 * 1000 * 10);
217  }
template<>
long long System::adjustTime< Month > ( long long  t)
inline

Definition at line 235 of file Timing.h.

235  {
236  return (t==-1) ? t : t /= (1LL * 30 * 24 * 60 * 60 * 1000 * 1000 * 10);
237  }
template<>
long long System::adjustTime< nanoSec > ( long long  t)
inline

Definition at line 231 of file Timing.h.

231  {
232  return (t==-1) ? t : t *= 100LL;
233  }
template<>
long long System::adjustTime< Native > ( long long  t)
inline

Definition at line 239 of file Timing.h.

239  {
240  return t;
241  }
template<>
long long System::adjustTime< Sec > ( long long  t)
inline

Definition at line 219 of file Timing.h.

219  {
220  return (t==-1) ? t : t /= (1000 * 1000 * 10);
221  }
template<>
long long System::adjustTime< Year > ( long long  t)
inline

Definition at line 203 of file Timing.h.

203  {
204  return (t==-1) ? t : t /= (1LL * 365 * 24 * 60 * 60 * 1000 * 1000 * 10);
205  }
long System::affinityMask ( InfoType  fetch = ProcessBasics,
long  pid = -1 
)

Basic Process Information: Affinity mask.

Definition at line 73 of file Memory.cpp.

73  {
74  PROCESS_BASIC_INFORMATION info;
75  if ( fetch != NoFetch && getProcess()->query(pid, ProcessBasics, &info) )
76  return info.AffinityMask;
77  return 0;
78 }
ProcessDescriptor * getProcess()
Retrieve Process structure.
long System::argc ( )

Number of arguments passed to the commandline (==numCmdLineArgs()); just to match argv call...

Number of arguments passed to the commandline.

Definition at line 468 of file System.cpp.

468  {
469  return cmdLineArgs().size();
470 }
T size(T...args)
GAUDI_API const std::vector< std::string > cmdLineArgs()
Command line arguments including executable name as arg[0] as vector of strings.
Definition: System.cpp:473
char ** System::argv ( )

char** command line arguments including executable name as arg[0]; You may not modify them!

Const char** command line arguments including executable name as arg[0].

added by I.B.

Definition at line 535 of file System.cpp.

535  {
537  if( s_argvChars.empty() ) { cmdLineArgs(); }
538  // We rely here on the fact that a vector's allocation table is contiguous
540  return (char**)&s_argvChars[0];
541 }
GAUDI_API const std::vector< std::string > cmdLineArgs()
Command line arguments including executable name as arg[0] as vector of strings.
Definition: System.cpp:473
GAUDI_API int System::backTrace ( void **  addresses,
const int  depth 
)
bool System::backTrace ( std::string btrace,
const int  depth,
const int  offset = 0 
)

Definition at line 614 of file System.cpp.

615 {
616  try {
617  // Always hide the first two levels of the stack trace (that's us)
618  const int totalOffset = offset + 2;
619  const int totalDepth = depth + totalOffset;
620 
621  std::string fnc, lib;
622 
623  std::vector<void*> addresses( totalDepth, nullptr );
624  int count = System::backTrace(addresses.data(),totalDepth);
625  for (int i = totalOffset; i < count; ++i) {
626  void *addr = nullptr;
627 
628  if (System::getStackLevel(addresses[i],addr,fnc,lib)) {
629  std::ostringstream ost;
630  ost << "#" << std::setw(3) << std::setiosflags( std::ios::left ) << i-totalOffset+1;
631  ost << std::hex << addr << std::dec << " " << fnc << " [" << lib << "]" << std::endl;
632  btrace += ost.str();
633  }
634  }
635  return true;
636  } catch ( const std::bad_alloc& e ) {
637  return false;
638  }
639 }
GAUDI_API bool getStackLevel(void *addresses, void *&addr, std::string &fnc, std::string &lib)
T endl(T...args)
T setiosflags(T...args)
GAUDI_API int backTrace(void **addresses, const int depth)
T setw(T...args)
STL class.
T count(T...args)
STL class.
T hex(T...args)
long System::basePriority ( InfoType  fetch = ProcessBasics,
long  pid = -1 
)

Basic Process Information: Base priority.

Definition at line 51 of file Memory.cpp.

51  {
52  PROCESS_BASIC_INFORMATION info;
53  if ( fetch != NoFetch && getProcess()->query(pid, ProcessBasics, &info) )
54  return info.BasePriority;
55  return 0;
56 }
ProcessDescriptor * getProcess()
Retrieve Process structure.
long System::breakExecution ( )

Break the execution of the application and invoke the debugger.

Definition at line 47 of file Debugger.cpp.

47  {
48 #ifdef _WIN32
49  _asm int 3
50  return 1;
51 #else
52  // I have no clue how to do this in linux
53  return 0;
54 #endif
55 }
long System::breakExecution ( long  pid)

Break the execution of the application and invoke the debugger in a remote process.

Break the execution of the application and invoke the debugger on a possibly remote process.

Definition at line 58 of file Debugger.cpp.

58  {
59 #ifdef _WIN32
60  long result = 0;
61  if ( pid == Win::_getpid() ) {
62  _asm int 3
63  return 1;
64  }
65  else {
66  Win::LPTHREAD_START_ROUTINE fun;
67  Win::HANDLE th, ph;
68  Win::HINSTANCE mh;
69  Win::DWORD id;
70  mh = Win::LoadLibrary( "Kernel32" );
71  if ( 0 != mh ) {
72  fun = (Win::LPTHREAD_START_ROUTINE)Win::GetProcAddress(mh, "DebugBreak");
73  if ( 0 != fun ) {
74  ph = Win::OpenProcess (PROCESS_ALL_ACCESS, TRUE, pid);
75  if ( 0 != ph ) {
76  th = Win::CreateRemoteThread(ph,NULL,0,fun,0,0,&id);
77  if ( 0 != th ) {
78  Win::CloseHandle(th);
79  result = 1;
80  }
81  Win::CloseHandle(ph);
82  }
83  }
84  Win::FreeLibrary(mh);
85  }
86  }
87  if ( result != 1 ) result = Win::GetLastError();
88  return result;
89 #else
90  // I have no clue how to do this in linux
91  return pid;
92 #endif
93 }
bool TRUE
for job options legacy (TODO: get rid of these!) ----------------------—
Definition: Constants.py:20
double fun(const std::vector< double > &x)
Definition: PFuncTest.cpp:26
const std::vector< std::string > System::cmdLineArgs ( )

Command line arguments including executable name as arg[0] as vector of strings.

Const char** command line arguments including executable name as arg[0].

Definition at line 473 of file System.cpp.

473  {
474  if ( s_argvChars.size() == 0 ) {
475  char exe[1024];
476 #ifdef _WIN32
477  // Disable warning C4996 triggered by C standard library calls
479 #pragma warning(push)
480 #pragma warning(disable:4996)
481  // For compatibility with UNIX we CANNOT use strtok!
482  // If we would use strtok, options like -g="My world" at
483  // the command line level would result on NT in TWO options
484  // instead in one as in UNIX.
485  char *next, *tmp1, *tmp2;
486  for(LPTSTR cmd = ::GetCommandLine(); *cmd; cmd=next) {
487  memset(exe,0,sizeof(exe));
488  while ( *cmd == ' ' ) cmd++;
489  next=::strchr(cmd,' ');
490  if ( !next ) next = cmd + strlen(cmd);
491  if ( (tmp1=::strchr(cmd,'\"')) > 0 && tmp1 < next ) {
492  tmp2 = ::strchr(++tmp1,'\"');
493  if ( tmp2 > 0 ) {
494  next = ++tmp2;
495  if ( cmd < tmp1 ) strncpy(exe, cmd, tmp1-cmd-1);
496  strncpy(&exe[strlen(exe)], tmp1, tmp2-tmp1-1);
497  }
498  else {
499  std::cout << "Mismatched \" in command line arguments" << std::endl;
500  s_argvChars.erase(s_argvChars.begin(), s_argvChars.end());
501  s_argvStrings.erase(s_argvStrings.begin(), s_argvStrings.end());
502  return s_argvStrings;
503  }
504  }
505  else {
506  strncpy(exe, cmd, next-cmd);
507  }
508  s_argvStrings.push_back(exe);
509  s_argvChars.push_back( s_argvStrings.back().c_str());
510  }
511 #pragma warning(pop)
512 #elif defined(__linux) || defined(__APPLE__)
513  sprintf(exe, "/proc/%d/cmdline", ::getpid());
514  FILE *cmdLine = ::fopen(exe,"r");
515  char cmd[1024];
516  if ( cmdLine ) {
517  long len = fread(cmd, sizeof(char), sizeof(cmd), cmdLine);
518  if ( len > 0 ) {
519  cmd[len] = 0;
520  for ( char* token = cmd; token-cmd < len; token += strlen(token)+1 ) {
521  s_argvStrings.push_back(token);
522  s_argvChars.push_back( s_argvStrings.back().c_str());
523  }
524  s_argvStrings[0] = exeName();
525  s_argvChars[0] = s_argvStrings[0].c_str();
526  }
527  ::fclose(cmdLine);
528  }
529 #endif
530  }
531  return s_argvStrings;
532 }
T endl(T...args)
T fread(T...args)
T memset(T...args)
T end(T...args)
GAUDI_API const std::string & exeName()
Name of the executable file running.
Definition: ModuleInfo.cpp:207
T push_back(T...args)
T strncpy(T...args)
T strlen(T...args)
T next(T...args)
T erase(T...args)
T begin(T...args)
T c_str(T...args)
T back(T...args)
T sprintf(T...args)
T strchr(T...args)
longlong System::cpuTime ( TimeType  typ = milliSec,
InfoType  fetch = Times,
long  pid = -1 
)

Consumed CPU time of process in milliseconds.

CPU kernel time of process in milliseconds.

Parameters
typIndicator or the unit the time will be returned.
fetchIndicator of the information to be fetched. If Fetch_None, the information will not be updated.
pidProcess ID of which the information will be returned
Returns
Requested value in the indicated units.

Definition at line 167 of file Timing.cpp.

167  {
168  longlong cputime = 0;
169  KERNEL_USER_TIMES info;
170  if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) ) {
171  cputime = adjustTime(typ, info.KernelTime+info.UserTime );
172  }
173  return cputime;
174 }
GAUDI_API longlong adjustTime(TimeType typ, longlong timevalue)
Convert time from OS native time to requested representation (Experts only)
Definition: Timing.cpp:37
ProcessDescriptor * getProcess()
Retrieve Process structure.
longlong System::creationTime ( TimeType  typ = milliSec,
InfoType  fetch = Times,
long  pid = -1 
)

Process Creation time.

Units of time between process creation and begin of epoche.

Parameters
typIndicator or the unit the time will be returned.
fetchIndicator of the information to be fetched. If Fetch_None, the information will not be updated.
pidProcess ID of which the information will be returned
Returns
Requested value in the indicated units.

Definition at line 113 of file Timing.cpp.

113  {
114  longlong created = 0;
115  KERNEL_USER_TIMES info;
116  if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) ) {
117  created = adjustTime(typ, info.CreateTime-UNIX_BASE_TIME);
118  }
119  return created;
120 }
GAUDI_API longlong adjustTime(TimeType typ, longlong timevalue)
Convert time from OS native time to requested representation (Experts only)
Definition: Timing.cpp:37
ProcessDescriptor * getProcess()
Retrieve Process structure.
template<TimeType T>
GAUDI_API longlong System::currentTime ( )
inline

Retrieve absolute system time.

Parameters
typIndicator or the unit the time will be returned.
Returns
Requested value in the indicated units.Get current time in specificed units via template parameter (inlined)

Definition at line 245 of file Timing.h.

245  {
246 #ifdef _WIN32
247  longlong current = 0;
248  ::GetSystemTimeAsFileTime((FILETIME*)&current);
249  return adjustTime<T>(current - UNIX_BASE_TIME);
250 #else
251  struct timeval tv;
252  ::gettimeofday(&tv, 0);
253  return adjustTime<T>((tv.tv_sec*1000000 + tv.tv_usec)*10);
254 #endif
255  }
longlong System::currentTime ( TimeType  typ = milliSec)

Get current time in specificed units.

Retrieve current system time.

Definition at line 79 of file Timing.cpp.

79  {
80  switch( typ ) {
81  case Year : return currentTime<Year >();
82  case Month : return currentTime<Month >();
83  case Day : return currentTime<Day >();
84  case Hour : return currentTime<Hour >();
85  case Min : return currentTime<Min >();
86  case Sec : return currentTime<Sec >();
87  case milliSec: return currentTime<milliSec>();
88  case microSec: return currentTime<microSec>();
89  case nanoSec : return currentTime<nanoSec >();
90  case Native : return currentTime<Native >();
91  }
92  return currentTime<Native>();
93 }
template longlong currentTime< milliSec >()
template longlong currentTime< microSec >()
template longlong currentTime< Native >()
template longlong currentTime< nanoSec >()
template<TimeType T>
longlong System::currentTime ( )
inline

Retrieve absolute system time.

Parameters
typIndicator or the unit the time will be returned.
Returns
Requested value in the indicated units.Get current time in specificed units via template parameter (inlined)

Definition at line 245 of file Timing.h.

245  {
246 #ifdef _WIN32
247  longlong current = 0;
248  ::GetSystemTimeAsFileTime((FILETIME*)&current);
249  return adjustTime<T>(current - UNIX_BASE_TIME);
250 #else
251  struct timeval tv;
252  ::gettimeofday(&tv, 0);
253  return adjustTime<T>((tv.tv_sec*1000000 + tv.tv_usec)*10);
254 #endif
255  }
template longlong System::currentTime< Day > ( )
template longlong System::currentTime< Min > ( )
template longlong System::currentTime< Sec > ( )
longlong System::ellapsedTime ( TimeType  typ = milliSec,
InfoType  fetch = Times,
long  pid = -1 
)

Elapsed time since start of process in milliseconds.

Ellapsed time since start of process in milliseconds.

Parameters
typIndicator or the unit the time will be returned.
timevalueTime value to be converted.
Returns
Requested value in the indicated units.

Definition at line 138 of file Timing.cpp.

138  {
139  KERNEL_USER_TIMES info;
140  longlong ellapsed = currentTime(microSec)*10;
141  getProcess()->query(pid, fetch, &info);
142  ellapsed = adjustTime(typ, ellapsed+UNIX_BASE_TIME-info.CreateTime);
143  return ellapsed;
144 }
GAUDI_API longlong currentTime()
Retrieve absolute system time.
Definition: Timing.h:245
GAUDI_API longlong adjustTime(TimeType typ, longlong timevalue)
Convert time from OS native time to requested representation (Experts only)
Definition: Timing.cpp:37
ProcessDescriptor * getProcess()
Retrieve Process structure.
long query(long pid, InfoType info, PROCESS_BASIC_INFORMATION *buffer)
System::ImageHandle System::exeHandle ( )

Handle to the executable file running.

Definition at line 171 of file ModuleInfo.cpp.

171  {
172 #ifdef _WIN32
173  if ( processHandle() ) {
174  static HINSTANCE handle = 0;
175  DWORD cbNeeded;
176  if ( 0 == handle && _psApi ) {
177  if ( _psApi.EnumProcessModules( processHandle(), &handle, sizeof(ModuleHandle), &cbNeeded) ) {
178  }
179  }
180  return handle;
181  }
182  return 0;
183 #elif defined(__linux) || defined(__APPLE__)
184  // This does NOT work!
185  static Dl_info infoBuf, *info = &infoBuf;
186  if ( !info ) {
187  void* handle = ::dlopen(nullptr, RTLD_LAZY);
188  //printf("Exe handle:%X\n", handle);
189  if ( handle ) {
190  void* func = ::dlsym(handle, "main");
191  //printf("Exe:Func handle:%X\n", func);
192  if ( func ) {
193  if ( 0 != ::dladdr(func, &infoBuf) ) {
194  //std::cout << "All OK" << std::endl;
195  info = &infoBuf;
196  }
197  }
198  }
199  }
200  return info;
201 #elif __hpux
202  // Don't know how to solve this .....
203  return 0;
204 #endif
205 }
GAUDI_API ProcessHandle processHandle()
Handle to running process.
Definition: ModuleInfo.cpp:126
const std::string & System::exeName ( )

Name of the executable file running.

Definition at line 207 of file ModuleInfo.cpp.

207  {
208  static std::string module("");
209  if ( module.length() == 0 ) {
210  char name[PATH_MAX] = {"Unknown.module"};
211  name[0] = 0;
212 #ifdef _WIN32
213  if ( _psApi && processHandle() ) {
214  _psApi.GetModuleFileNameExA( processHandle(), (HINSTANCE)exeHandle(), name,sizeof(name) );
215  module = name;
216  }
217 #elif defined(__linux) || defined(__APPLE__)
218  char cmd[512];
219  ::sprintf(cmd, "/proc/%d/exe", ::getpid());
220  module = "Unknown";
221  if (::readlink(cmd, name, sizeof(name)) >= 0)
222  module = name;
223 #elif __hpux
224  if (::realpath(((HMODULE*)exeHandle())->dsc.filename, name))
225  module = name;
226 #endif
227  }
228  return module;
229 }
GAUDI_API ProcessHandle processHandle()
Handle to running process.
Definition: ModuleInfo.cpp:126
STL class.
GAUDI_API ImageHandle exeHandle()
Handle to the executable file running.
Definition: ModuleInfo.cpp:171
long System::exitStatus ( InfoType  fetch = ProcessBasics,
long  pid = -1 
)

Basic Process Information: Exit status (does not really make sense for the running process, but for others!)

Definition at line 81 of file Memory.cpp.

81  {
82  PROCESS_BASIC_INFORMATION info;
83  if ( fetch != NoFetch && getProcess()->query(pid, ProcessBasics, &info) )
84  return info.ExitStatus;
85  return -2;
86 }
ProcessDescriptor * getProcess()
Retrieve Process structure.
std::string System::getEnv ( const char *  var)

get a particular environment variable (returning "UNKNOWN" if not set)

get a particular env var, return "UNKNOWN" if not defined

Definition at line 550 of file System.cpp.

550  {
551  char* env;
552  if ( (env = getenv(var)) != nullptr ) {
553  return env;
554  } else {
555  return "UNKNOWN";
556  }
557 }
T getenv(T...args)
bool System::getEnv ( const char *  var,
std::string value 
)

get a particular environment variable, storing the value in the passed string if the variable is set.

get a particular env var, storing the value in the passed string (if set)

Returns true if the variable is set, false otherwise.

Definition at line 560 of file System.cpp.

560  {
561  char* env;
562  if ( (env = getenv(var)) != nullptr ) {
563  value = env;
564  return true;
565  } else {
566  return false;
567  }
568 }
T getenv(T...args)
bool System::getEnv ( const std::string var,
std::string value 
)
inline

Definition at line 90 of file System.h.

90  {
91  return getEnv(var.c_str(), value);
92  }
GAUDI_API std::vector< std::string > getEnv()
get all environment variables
Definition: System.cpp:579
T c_str(T...args)
std::vector< std::string > System::getEnv ( )

get all environment variables

get all defined environment vars

Definition at line 579 of file System.cpp.

579  {
580 #if defined(_WIN32)
581 # define environ _environ
582 #elif defined(__APPLE__)
583  static char **environ = *_NSGetEnviron();
584 #endif
586  for (int i=0; environ[i] != nullptr; ++i) {
587  vars.push_back(environ[i]);
588  }
589  return vars;
590 }
T push_back(T...args)
const std::string System::getErrorString ( unsigned long  error)

Retrieve error code as string for a given error.

Definition at line 262 of file System.cpp.

262  {
263  std::string errString = "";
264 #ifdef _WIN32
265  LPVOID lpMessageBuffer;
266  ::FormatMessage(
267  FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
268  NULL,
269  error,
270  MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), //The user default language
271  (LPTSTR) &lpMessageBuffer,
272  0,
273  NULL );
274  errString = (const char*)lpMessageBuffer;
275  // Free the buffer allocated by the system
276  ::LocalFree( lpMessageBuffer );
277 #else
278  char *cerrString(nullptr);
279  // Remember: for linux dl* routines must be handled differently!
280  if ( error == 0xAFFEDEAD ) {
281  cerrString = (char*)::dlerror();
282  if ( !cerrString ) cerrString = ::strerror(error);
283  if ( !cerrString ) {
284  cerrString = (char *)"Unknown error. No information found in strerror()!";
285  }
286  else {
287  errString = std::string(cerrString);
288  }
289  errno = 0;
290  }
291  else {
292  cerrString = ::strerror(error);
293  errString = std::string(cerrString);
294  }
295 #endif
296  return errString;
297 }
STL class.
unsigned long System::getLastError ( )

Get last system known error.

Retrieve last error code.

Definition at line 246 of file System.cpp.

246  {
247 #ifdef _WIN32
248  return ::GetLastError();
249 #else
250  // convert errno (int) to unsigned long
251  return static_cast<unsigned long>(static_cast<unsigned int>(errno));
252 #endif
253 }
const std::string System::getLastErrorString ( )

Get last system error as string.

Retrieve last error code as string.

Definition at line 256 of file System.cpp.

256  {
257  const std::string errString = getErrorString(getLastError());
258  return errString;
259 }
GAUDI_API const std::string getErrorString(unsigned long error)
Retrieve error code as string for a given error.
Definition: System.cpp:262
GAUDI_API unsigned long getLastError()
Get last system known error.
Definition: System.cpp:246
STL class.
unsigned long System::getProcedureByName ( ImageHandle  handle,
const std::string name,
EntryPoint pFunction 
)

Get a specific function defined in the DLL.

Definition at line 191 of file System.cpp.

191  {
192 #ifdef _WIN32
193  *pFunction = (EntryPoint)::GetProcAddress((HINSTANCE)handle, name.data());
194  if ( 0 == *pFunction ) {
195  return System::getLastError();
196  }
197  return 1;
198 #elif defined(__linux)
199 #if __GNUC__ < 4
200  *pFunction = (EntryPoint)::dlsym(handle, name.c_str());
201 #else
202  *pFunction = FuncPtrCast<EntryPoint>(::dlsym(handle, name.c_str()));
203 #endif
204  if ( ! *pFunction ) {
205  errno = 0xAFFEDEAD;
206  // std::cout << "System::getProcedureByName>" << getLastErrorString() << std::endl;
207  return 0;
208  }
209  return 1;
210 #elif defined(__APPLE__)
211  *pFunction = (EntryPoint)::dlsym(handle, name.c_str());
212  if(!(*pFunction)) {
213  // Try with an underscore :
214  std::string sname = "_" + name;
215  *pFunction = (EntryPoint)::dlsym(handle, sname.c_str());
216  }
217  if ( 0 == *pFunction ) {
218  errno = 0xAFFEDEAD;
219  std::cout << "System::getProcedureByName>" << getLastErrorString() << std::endl;
220  //std::cout << "System::getProcedureByName> failure" << std::endl;
221  return 0;
222  }
223  return 1;
224 #elif __hpux
225  HMODULE* mod = (HMODULE*)handle;
226  if ( 0 != mod ) {
227  long ll1 = name.length();
228  for ( int i = 0; i < mod->numSym; i++ ) {
229  long ll2 = strlen(mod->sym[i].name);
230  if ( 0 != ::strncmp(mod->sym[i].name, name.c_str(), (ll1>ll2) ? ll1 : ll2)==0 ) {
231  *pFunction = (EntryPoint) mod->sym[i].value;
232  return 1;
233  }
234  }
235  }
236  return 0;
237 #endif
238 }
GAUDI_API unsigned long getLastError()
Get last system known error.
Definition: System.cpp:246
T endl(T...args)
unsigned long(* EntryPoint)(const unsigned long iid, void **ppvObject)
Definition of the "generic" DLL entry point function.
Definition: System.h:35
STL class.
T data(T...args)
T strlen(T...args)
T length(T...args)
T strncmp(T...args)
T c_str(T...args)
GAUDI_API const std::string getLastErrorString()
Get last system error as string.
Definition: System.cpp:256
unsigned long System::getProcedureByName ( ImageHandle  handle,
const std::string name,
Creator pFunction 
)

Get a specific function defined in the DLL.

Definition at line 241 of file System.cpp.

241  {
242  return getProcedureByName(handle, name, (EntryPoint*)pFunction);
243 }
GAUDI_API unsigned long getProcedureByName(ImageHandle handle, const std::string &name, EntryPoint *pFunction)
Get a specific function defined in the DLL.
Definition: System.cpp:191
unsigned long(* EntryPoint)(const unsigned long iid, void **ppvObject)
Definition of the "generic" DLL entry point function.
Definition: System.h:35
ProcessDescriptor * System::getProcess ( )
inline

Retrieve Process structure.

Definition at line 135 of file ProcessDescriptor.h.

136  {
137  static ProcessDescriptor p;
138  return &p;
139  }
ProcessTime System::getProcessTime ( long  pid = -1)

Retrieve the process time data for a process.

Get the process time data for a process (by default the current) as a ProcessTime object.

Definition at line 177 of file Timing.cpp.

177  {
178  KERNEL_USER_TIMES info;
179  if (getProcess()->query(pid, Times, &info)) {
180  return ProcessTime(info.KernelTime,
181  info.UserTime,
182  currentTime<Native>() - info.CreateTime);
183  }
184  return ProcessTime(); // return 0s in case of problems
185  }
template longlong currentTime< Native >()
ProcessDescriptor * getProcess()
Retrieve Process structure.
GAUDI_API bool System::getStackLevel ( void *  addresses,
void *&  addr,
std::string fnc,
std::string lib 
)
std::string System::homeDirectory ( )

Definition at line 60 of file Environment.cpp.

60  {
61  // Return the user's home directory.
62  std::string home_dir = "./";
63  // Try to replace the current value with the content of several
64  // environment variables
65  if ( ! (System::getEnv("home", home_dir) ||
66  System::getEnv("HOME", home_dir)) ) {
67  // for Windows NT HOME might be defined as either $(HOMESHARE)/$(HOMEPATH)
68  // or $(HOMEDRIVE)/$(HOMEPATH)
69  if ( System::getEnv("HOMESHARE", home_dir) ||
70  System::getEnv("HOMEDRIVE", home_dir) ) {
72  if (System::getEnv("HOMEPATH", path))
73  home_dir += path;
74  }
75  }
76  return home_dir;
77 }
GAUDI_API std::string getEnv(const char *var)
get a particular environment variable (returning "UNKNOWN" if not set)
Definition: System.cpp:550
STL class.
const std::string & System::hostName ( )

Host name.

Definition at line 371 of file System.cpp.

371  {
372  static const std::string host = init_hostName();
373  return host;
374 }
STL class.
int System::instructionsetLevel ( )

Instruction Set "Level".

Definition at line 434 of file System.cpp.

434  {
435  return instrset_detect();
436 }
int instrset_detect(void)
bool System::isEnvSet ( const char *  var)

Check if an environment variable is set or not.

Definition at line 570 of file System.cpp.

570  {
571  return getenv(var) != nullptr;
572 }
T getenv(T...args)
longlong System::kernelTime ( TimeType  typ = milliSec,
InfoType  fetch = Times,
long  pid = -1 
)

CPU kernel mode time of process in milliseconds.

CPU kernel time of process in milliseconds.

Parameters
typIndicator or the unit the time will be returned.
fetchIndicator of the information to be fetched. If Fetch_None, the information will not be updated.
pidProcess ID of which the information will be returned
Returns
Requested value in the indicated units.

Definition at line 147 of file Timing.cpp.

147  {
148  KERNEL_USER_TIMES info;
149  longlong kerneltime = 0;
150  if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) ) {
151  kerneltime = adjustTime(typ, info.KernelTime );
152  }
153  return kerneltime;
154 }
GAUDI_API longlong adjustTime(TimeType typ, longlong timevalue)
Convert time from OS native time to requested representation (Experts only)
Definition: Timing.cpp:37
ProcessDescriptor * getProcess()
Retrieve Process structure.
const std::vector< std::string > System::linkedModules ( )

Vector of names of linked modules.

Definition at line 231 of file ModuleInfo.cpp.

231  {
232  if ( s_linkedModules.size() == 0 ) {
233 #ifdef _WIN32
234  char name[255]; // Maximum file name length on NT 4.0
235  DWORD cbNeeded;
236  HINSTANCE handle[1024];
237  if ( _psApi ) {
238  if ( _psApi.EnumProcessModules(processHandle(),handle,sizeof(handle),&cbNeeded) ) {
239  for (size_t i = 0; i < cbNeeded/sizeof(HANDLE); i++ ) {
240  if ( 0 < _psApi.GetModuleFileNameExA( processHandle(), handle[i], name, sizeof(name)) ) {
241  s_linkedModules.push_back(name);
242  }
243  }
244  }
245  }
246 #elif defined(__linux) || defined(__APPLE__)
247  char ff[512], cmd[1024], fname[1024], buf1[64], buf2[64], buf3[64], buf4[64];
248  ::sprintf(ff, "/proc/%d/maps", ::getpid());
249  FILE* maps = ::fopen(ff, "r");
250  while( ::fgets(cmd, sizeof(cmd), maps) ) {
251  int len;
252  sscanf(cmd, "%s %s %s %s %d %s", buf1, buf2, buf3, buf4, &len, fname);
253  if ( len > 0 && strncmp(buf2,"r-xp",strlen("r-xp")) == 0 ) {
254  s_linkedModules.push_back(fname);
255  }
256  }
257  ::fclose(maps);
258 #endif
259  }
260  return s_linkedModules;
261 }
T sscanf(T...args)
T fgets(T...args)
GAUDI_API ProcessHandle processHandle()
Handle to running process.
Definition: ModuleInfo.cpp:126
T push_back(T...args)
T strlen(T...args)
T size(T...args)
T strncmp(T...args)
unsigned long System::loadDynamicLib ( const std::string name,
ImageHandle handle 
)

Load dynamic link library.

Definition at line 126 of file System.cpp.

126  {
127  unsigned long res;
128  // if name is empty, just load it
129  if (name.length() == 0) {
130  res = loadWithoutEnvironment(name, handle);
131  } else {
132  // If the name is a logical name (environment variable), the try
133  // to load the corresponding library from there.
134  std::string imgName;
135  if ( getEnv(name, imgName) ) {
136  res = loadWithoutEnvironment(imgName, handle);
137  } else {
138  // build the dll name
139  std::string dllName = name;
140  // if the lib name contains '/' we can assume is the path to a file
141  // (relative or absolute), otherwise it might be a logical library name
142  // (i.e. without 'lib' and '.so')
143  if (dllName.find('/') == std::string::npos) {
144 #if defined(__linux) || defined(__APPLE__)
145  if (dllName.compare(0, 3, "lib") != 0)
146  dllName = "lib" + dllName;
147 #endif
148  if (dllName.find(SHLIB_SUFFIX) == std::string::npos)
149  dllName += SHLIB_SUFFIX;
150  }
151  // try to locate the dll using the standard PATH
152  res = loadWithoutEnvironment(dllName, handle);
153  }
154  if ( res != 1 ) {
155 #if defined(__linux) || defined(__APPLE__)
156  errno = 0xAFFEDEAD;
157 #endif
158  // std::cout << "System::loadDynamicLib>" << getLastErrorString() << std::endl;
159  }
160  }
161  return res;
162 }
GAUDI_API std::string getEnv(const char *var)
get a particular environment variable (returning "UNKNOWN" if not set)
Definition: System.cpp:550
STL class.
T find(T...args)
T length(T...args)
T compare(T...args)
const std::string & System::machineType ( )

Machine type.

Definition at line 415 of file System.cpp.

415  {
416  static std::string mach = "";
417 #ifdef _WIN32
418  SYSTEM_INFO ut;
419  ::GetSystemInfo(&ut);
420  std::ostringstream arch;
421  arch << ut.wProcessorArchitecture;
422  mach = arch.str();
423 #else
424  struct utsname ut;
425  if (uname(&ut) == 0) {
426  mach = ut.machine;
427  } else {
428  mach = "UNKNOWN";
429  }
430 #endif
431  return mach;
432 }
STL class.
long System::mappedMemory ( MemoryUnit  unit = kByte,
InfoType  fetch = Memory,
long  pid = -1 
)

Basic Process Information: priority boost.

Definition at line 180 of file Memory.cpp.

180  {
181  VM_COUNTERS info;
182  if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) )
183  return adjustMemory(unit, info.WorkingSetSize);
184  return -2;
185 }
GAUDI_API long adjustMemory(MemoryUnit typ, long value)
Convert time from kByte to requested representation (Experts only)
Definition: Memory.cpp:34
ProcessDescriptor * getProcess()
Retrieve Process structure.
long System::mappedMemoryPeak ( MemoryUnit  unit = kByte,
InfoType  fetch = Memory,
long  pid = -1 
)

Basic Process Information: priority boost.

Definition at line 188 of file Memory.cpp.

188  {
189  VM_COUNTERS info;
190  if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) )
191  return adjustMemory(unit, info.PeakWorkingSetSize);
192  return -2;
193 }
GAUDI_API long adjustMemory(MemoryUnit typ, long value)
Convert time from kByte to requested representation (Experts only)
Definition: Memory.cpp:34
ProcessDescriptor * getProcess()
Retrieve Process structure.
long System::maxMemoryLimit ( MemoryUnit  unit = kByte,
InfoType  fetch = Quota,
long  pid = -1 
)

System Process Limits: Maximum amount of virtual memory this process is allowed to use.

Definition at line 204 of file Memory.cpp.

204  {
205  QUOTA_LIMITS quota;
206  if ( fetch != NoFetch && getProcess()->query(pid, fetch, &quota) )
207  return adjustMemory(unit, quota.MaximumWorkingSetSize);
208  return 0;
209 }
GAUDI_API long adjustMemory(MemoryUnit typ, long value)
Convert time from kByte to requested representation (Experts only)
Definition: Memory.cpp:34
ProcessDescriptor * getProcess()
Retrieve Process structure.
long System::minMemoryLimit ( MemoryUnit  unit = kByte,
InfoType  fetch = Quota,
long  pid = -1 
)

System Process Limits: Minimum amount of virtual memory this process may use.

Definition at line 196 of file Memory.cpp.

196  {
197  QUOTA_LIMITS quota;
198  if ( fetch != NoFetch && getProcess()->query(pid, fetch, &quota) )
199  return adjustMemory(unit, quota.MinimumWorkingSetSize);
200  return 0;
201 }
GAUDI_API long adjustMemory(MemoryUnit typ, long value)
Convert time from kByte to requested representation (Experts only)
Definition: Memory.cpp:34
ProcessDescriptor * getProcess()
Retrieve Process structure.
System::ImageHandle System::moduleHandle ( )

Handle to currently executed module.

Definition at line 140 of file ModuleInfo.cpp.

140  {
141  if ( !ModuleHandle ) {
142  if ( processHandle() ) {
143 #ifdef _WIN32
144  static HINSTANCE handle = 0;
145  DWORD cbNeeded;
146  if ( 0 == handle && _psApi ) {
147  if ( _psApi.EnumProcessModules( processHandle(), &handle, sizeof(ModuleHandle), &cbNeeded) ) {
148  }
149  }
150  return handle;
151 #elif defined(__linux) || defined(__APPLE__)
152  static Dl_info info;
153  if ( 0 !=
154  ::dladdr(
155 #if __GNUC__ < 4
156  (void*)System::moduleHandle
157 #else
158  FuncPtrCast<void*>(System::moduleHandle)
159 #endif
160  , &info) ) {
161  return &info;
162  }
163 #elif __hpux
164  return 0; // Don't know how to solve this .....
165 #endif
166  }
167  }
168  return ModuleHandle;
169 }
GAUDI_API ProcessHandle processHandle()
Handle to running process.
Definition: ModuleInfo.cpp:126
GAUDI_API ImageHandle moduleHandle()
Handle to currently executed module.
Definition: ModuleInfo.cpp:140
const std::string & System::moduleName ( )

Get the name of the (executable/DLL) file without file-type.

Retrieve base name of module.

Definition at line 54 of file ModuleInfo.cpp.

54  {
55  static std::string module("");
56  if ( module == "" ) {
57  if ( processHandle() && moduleHandle() ) {
58 #ifdef _WIN32
59  char moduleName[256] = {"Unknown.module"};
60  moduleName[0] = 0;
61  if ( _psApi ) {
62  _psApi.GetModuleBaseNameA( processHandle(), (HINSTANCE)moduleHandle(), moduleName, sizeof(moduleName) );
63  }
65 #elif defined(__linux) || defined(__APPLE__)
66  std::string mod = ::basename((char*)((Dl_info*)moduleHandle())->dli_fname);
67 #elif __hpux
68  std::string mod = ::basename(((HMODULE*)moduleHandle())->dsc.filename);
69 #endif
70  module = mod.substr(0, mod.rfind('.'));
71  }
72  }
73  return module;
74 }
T rfind(T...args)
GAUDI_API ProcessHandle processHandle()
Handle to running process.
Definition: ModuleInfo.cpp:126
STL class.
GAUDI_API ImageHandle moduleHandle()
Handle to currently executed module.
Definition: ModuleInfo.cpp:140
GAUDI_API const std::string & moduleName()
Get the name of the (executable/DLL) file without file-type.
Definition: ModuleInfo.cpp:54
T substr(T...args)
const std::string & System::moduleNameFull ( )

Get the full name of the (executable/DLL) file.

Retrieve full name of module.

Definition at line 77 of file ModuleInfo.cpp.

77  {
78  static std::string module("");
79  if ( module == "" ) {
80  if ( processHandle() && moduleHandle() ) {
81  char name[PATH_MAX] = {"Unknown.module"};
82  name[0] = 0;
83 #ifdef _WIN32
84  if ( _psApi ) {
85  _psApi.GetModuleFileNameExA( processHandle(), (HINSTANCE)moduleHandle(), name,sizeof(name) );
86  module = name;
87  }
88 #else
89  const char *path =
90 # if defined(__linux) || defined(__APPLE__)
91  ((Dl_info*)moduleHandle())->dli_fname;
92 # elif __hpux
93  ((HMODULE*)moduleHandle())->dsc.filename;
94 # endif
95  if (::realpath(path, name))
96  module = name;
97 #endif
98  }
99  }
100  return module;
101 }
GAUDI_API ProcessHandle processHandle()
Handle to running process.
Definition: ModuleInfo.cpp:126
STL class.
GAUDI_API ImageHandle moduleHandle()
Handle to currently executed module.
Definition: ModuleInfo.cpp:140
System::ModuleType System::moduleType ( )

Get type of the module.

Definition at line 104 of file ModuleInfo.cpp.

104  {
105  static ModuleType type = UNKNOWN;
106  if ( type == UNKNOWN ) {
107  const std::string& module = moduleNameFull();
108  int loc = module.rfind('.')+1;
109  if ( loc == 0 )
110  type = EXECUTABLE;
111  else if ( module[loc] == 'e' || module[loc] == 'E' )
112  type = EXECUTABLE;
113 #ifdef _WIN32
114  else if ( module[loc] == 'd' || module[loc] == 'D' )
115 #else
116  else if ( module[loc] == 's' && module[loc+1] == 'o' )
117 #endif
118  type = SHAREDLIB;
119  else
120  type = UNKNOWN;
121  }
122  return type;
123 }
GAUDI_API const std::string & moduleNameFull()
Get the full name of the (executable/DLL) file.
Definition: ModuleInfo.cpp:77
T rfind(T...args)
STL class.
ModuleType
Definition: ModuleInfo.h:28
long System::nonPagedMemory ( MemoryUnit  unit = kByte,
InfoType  fetch = Memory,
long  pid = -1 
)

Basic Process Information: Current usage of non paged memory.

Basic Process Information: priority boost.

Definition at line 105 of file Memory.cpp.

105  {
106  VM_COUNTERS info;
107  if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) )
108  return adjustMemory(unit, info.QuotaNonPagedPoolUsage);
109  return -2;
110 }
GAUDI_API long adjustMemory(MemoryUnit typ, long value)
Convert time from kByte to requested representation (Experts only)
Definition: Memory.cpp:34
ProcessDescriptor * getProcess()
Retrieve Process structure.
long System::nonPagedMemoryLimit ( MemoryUnit  unit = kByte,
InfoType  fetch = Quota,
long  pid = -1 
)

System Process Limits: Maximum amount of non-paged memory this process is allowed to use.

Definition at line 113 of file Memory.cpp.

113  {
114  POOLED_USAGE_AND_LIMITS quota;
115  if ( fetch != NoFetch && getProcess()->query(pid, fetch, &quota) )
116  return adjustMemory(unit, quota.NonPagedPoolLimit);
117  return 0;
118 }
GAUDI_API long adjustMemory(MemoryUnit typ, long value)
Convert time from kByte to requested representation (Experts only)
Definition: Memory.cpp:34
ProcessDescriptor * getProcess()
Retrieve Process structure.
long System::nonPagedMemoryPeak ( MemoryUnit  unit = kByte,
InfoType  fetch = Memory,
long  pid = -1 
)

Basic Process Information: Peak usage of non paged memory.

Basic Process Information: priority boost.

Definition at line 97 of file Memory.cpp.

97  {
98  VM_COUNTERS info;
99  if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) )
100  return adjustMemory(unit, info.QuotaPeakNonPagedPoolUsage);
101  return -2;
102 }
GAUDI_API long adjustMemory(MemoryUnit typ, long value)
Convert time from kByte to requested representation (Experts only)
Definition: Memory.cpp:34
ProcessDescriptor * getProcess()
Retrieve Process structure.
long System::numCmdLineArgs ( )

Number of arguments passed to the commandline.

Definition at line 463 of file System.cpp.

463  {
464  return cmdLineArgs().size();
465 }
T size(T...args)
GAUDI_API const std::vector< std::string > cmdLineArgs()
Command line arguments including executable name as arg[0] as vector of strings.
Definition: System.cpp:473
long System::numPageFault ( InfoType  fetch = Memory,
long  pid = -1 
)

Basic Process Information: Number of page faults.

Basic Process Information: priority boost.

Definition at line 145 of file Memory.cpp.

145  {
146  VM_COUNTERS info;
147  if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) )
148  return info.PageFaultCount;
149  return -2;
150 }
ProcessDescriptor * getProcess()
Retrieve Process structure.
const std::string & System::osName ( )

OS name.

Definition at line 377 of file System.cpp.

377  {
378  static std::string osname = "";
379 #ifdef _WIN32
380  osname = "Windows";
381 #else
382  struct utsname ut;
383  if (uname(&ut) == 0) {
384  osname = ut.sysname;
385  } else {
386  osname = "UNKNOWN";
387  }
388 #endif
389  return osname;
390 }
STL class.
const std::string & System::osVersion ( )

OS version.

Definition at line 394 of file System.cpp.

394  {
395  static std::string osver = "";
396 #ifdef _WIN32
397  OSVERSIONINFO ut;
398  ut.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
399  ::GetVersionEx(&ut);
400  std::ostringstream ver;
401  ver << ut.dwMajorVersion << '.' << ut.dwMinorVersion;
402  osver = ver.str();
403 #else
404  struct utsname ut;
405  if (uname(&ut) == 0) {
406  osver = ut.release;
407  } else {
408  osver = "UNKNOWN";
409  }
410 #endif
411  return osver;
412 }
STL class.
long System::pagedMemory ( MemoryUnit  unit = kByte,
InfoType  fetch = Memory,
long  pid = -1 
)

Basic Process Information: Amount of paged memory currently occupied by the process 'pid'.

Definition at line 121 of file Memory.cpp.

121  {
122  VM_COUNTERS info;
123  if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) )
124  return adjustMemory(unit, info.QuotaPagedPoolUsage);
125  return -2;
126 }
GAUDI_API long adjustMemory(MemoryUnit typ, long value)
Convert time from kByte to requested representation (Experts only)
Definition: Memory.cpp:34
ProcessDescriptor * getProcess()
Retrieve Process structure.
long System::pagedMemoryLimit ( MemoryUnit  unit = kByte,
InfoType  fetch = Quota,
long  pid = -1 
)

Basic Process Information: Amount of paged memory that can be occupied by the process 'pid'.

Definition at line 137 of file Memory.cpp.

137  {
138  POOLED_USAGE_AND_LIMITS quota;
139  if ( fetch != NoFetch && getProcess()->query(pid, fetch, &quota) )
140  return adjustMemory(unit, quota.PagedPoolLimit);
141  return 0;
142 }
GAUDI_API long adjustMemory(MemoryUnit typ, long value)
Convert time from kByte to requested representation (Experts only)
Definition: Memory.cpp:34
ProcessDescriptor * getProcess()
Retrieve Process structure.
long System::pagedMemoryPeak ( MemoryUnit  unit = kByte,
InfoType  fetch = Memory,
long  pid = -1 
)

Basic Process Information: Maximum of paged memory occupied by the process 'pid'.

Definition at line 129 of file Memory.cpp.

129  {
130  VM_COUNTERS info;
131  if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) )
132  return adjustMemory(unit, info.QuotaPeakPagedPoolUsage);
133  return -2;
134 }
GAUDI_API long adjustMemory(MemoryUnit typ, long value)
Convert time from kByte to requested representation (Experts only)
Definition: Memory.cpp:34
ProcessDescriptor * getProcess()
Retrieve Process structure.
long System::pagefileUsage ( MemoryUnit  unit = kByte,
InfoType  fetch = Memory,
long  pid = -1 
)

Basic Process Information: Current page file usage.

Basic Process Information: priority boost.

Definition at line 153 of file Memory.cpp.

153  {
154  VM_COUNTERS info;
155  if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) )
156  return adjustMemory(unit, info.PagefileUsage);
157  return -2;
158 }
GAUDI_API long adjustMemory(MemoryUnit typ, long value)
Convert time from kByte to requested representation (Experts only)
Definition: Memory.cpp:34
ProcessDescriptor * getProcess()
Retrieve Process structure.
long System::pagefileUsageLimit ( MemoryUnit  unit = kByte,
InfoType  fetch = Quota,
long  pid = -1 
)

Basic Process Information: Peak usage of page file.

Basic Process Information: priority boost.

Definition at line 169 of file Memory.cpp.

169  {
170  POOLED_USAGE_AND_LIMITS quota;
171  if ( fetch != NoFetch && getProcess()->query(pid, fetch, &quota) ) {
172  if ( long(quota.PagefileLimit) < 0 )
173  return -1;//LONG_MAX;
174  return adjustMemory(unit, quota.PagefileLimit);
175  }
176  return -2;
177 }
GAUDI_API long adjustMemory(MemoryUnit typ, long value)
Convert time from kByte to requested representation (Experts only)
Definition: Memory.cpp:34
ProcessDescriptor * getProcess()
Retrieve Process structure.
long System::pagefileUsagePeak ( MemoryUnit  unit = kByte,
InfoType  fetch = Memory,
long  pid = -1 
)

Basic Process Information: Peak usage of page file.

Basic Process Information: priority boost.

Definition at line 161 of file Memory.cpp.

161  {
162  VM_COUNTERS info;
163  if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) )
164  return adjustMemory(unit, info.PeakPagefileUsage);
165  return -2;
166 }
GAUDI_API long adjustMemory(MemoryUnit typ, long value)
Convert time from kByte to requested representation (Experts only)
Definition: Memory.cpp:34
ProcessDescriptor * getProcess()
Retrieve Process structure.
long System::parentID ( InfoType  fetch = ProcessBasics,
long  pid = -1 
)

Basic Process Information: Parent's process ID.

Definition at line 65 of file Memory.cpp.

65  {
66  PROCESS_BASIC_INFORMATION info;
67  if ( fetch != NoFetch && getProcess()->query(pid, ProcessBasics, &info) )
68  return info.InheritedFromUniqueProcessId;
69  return 0;
70 }
ProcessDescriptor * getProcess()
Retrieve Process structure.
std::string System::PathResolverFindDataFile ( const std::string logical_file_name)

Definition at line 226 of file PathResolver.cpp.

227 {
228  return PathResolver::find_file (logical_file_name, "DATAPATH");
229 }
std::string System::PathResolverFindXMLFile ( const std::string logical_file_name)

Definition at line 221 of file PathResolver.cpp.

222 {
223  return PathResolver::find_file (logical_file_name, "XMLPATH");
224 }
long System::priorityBoost ( InfoType  fetch = PriorityBoost,
long  pid = -1 
)

Basic Process Information: priority boost.

Definition at line 89 of file Memory.cpp.

89  {
90  long info;
91  if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) )
92  return info;
93  return -2;
94 }
ProcessDescriptor * getProcess()
Retrieve Process structure.
void * System::processHandle ( )

Handle to running process.

Retrieve processhandle.

Definition at line 126 of file ModuleInfo.cpp.

126  {
127  static long pid = ::getpid();
128 #ifdef _WIN32
129  static HANDLE hP = ::OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,pid);
130 #else
131  static void* hP = (void*)pid;
132 #endif
133  return hP;
134 }
long System::procID ( )

Basic Process Information: Process ID.

Definition at line 59 of file Memory.cpp.

59  {
60  static const long s_pid = ::getpid();
61  return s_pid;
62 }
longlong System::remainingTime ( TimeType  typ = milliSec,
InfoType  fetch = Quota,
long  pid = -1 
)

Maximum processing time left for this process.

System Process Limits: Maximum processing time left for this process.

Parameters
typIndicator or the unit the time will be returned.
fetchIndicator of the information to be fetched. If Fetch_None, the information will not be updated.
pidProcess ID of which the information will be returned
Returns
Requested value in the indicated units.

Definition at line 123 of file Timing.cpp.

123  {
124  longlong left = 0;
125  QUOTA_LIMITS quota;
126  if ( fetch != NoFetch && getProcess()->query(pid, fetch, &quota) ) {
127  if ( left == -1 ) {
128  //left = _I64_MAX;
129  }
130  else {
131  left = adjustTime(typ, quota.TimeLimit);
132  }
133  }
134  return left;
135 }
T left(T...args)
GAUDI_API longlong adjustTime(TimeType typ, longlong timevalue)
Convert time from OS native time to requested representation (Experts only)
Definition: Timing.cpp:37
ProcessDescriptor * getProcess()
Retrieve Process structure.
StatusCode System::resolveEnv ( const std::string var,
std::string res,
int  recusions = 124 
)

Definition at line 51 of file Environment.cpp.

51  {
52  std::string source = var;
53  res = i_resolve(source, recursions);
54  if ( res.find("${") == std::string::npos ) {
55  return StatusCode::SUCCESS;
56  }
57  return StatusCode::FAILURE;
58 }
STL class.
T find(T...args)
int System::setEnv ( const std::string name,
const std::string value,
int  overwrite = 1 
)

Set an environment variables.

set an environment variables.

If value is empty, the variable is removed from the environment. When overwrite is 0, the variable is not set if already present. Returns 0 on success, -1 on failure. See man 3 setenv.

Returns
0 if successful, -1 if not

Definition at line 678 of file System.cpp.

679 {
680 #ifndef WIN32
681  // UNIX version
682  return value.empty() ?
683  // remove if set to nothing (and return success)
684  ::unsetenv(name.c_str()) , 0 :
685  // set the value
686  ::setenv(name.c_str(),value.c_str(), overwrite);
687 #else
688  // Windows version
689  if ( value.empty() ) {
690  // equivalent to unsetenv
691  return ::_putenv((name+"=").c_str());
692  }
693  else {
694  if ( !getenv(name.c_str()) || overwrite ) {
695  // set if not yet present or overwrite is set (force)
696  return ::_putenv((name+"="+value).c_str());
697  }
698  }
699  return 0; // if we get here, we are trying to set a variable already set, but
700  // not to overwrite.
701  // It is considered a success on Linux (man P setenv)
702 #endif
703 
704 }
T empty(T...args)
T getenv(T...args)
T c_str(T...args)
void System::setModuleHandle ( System::ImageHandle  handle)

Attach module handle.

Definition at line 136 of file ModuleInfo.cpp.

136  {
137  ModuleHandle = handle;
138 }
longlong System::systemStart ( TimeType  typ = Sec)

Maximum processing time left for this process.

Units of time since system startup and begin of epoche.

Parameters
typIndicator or the unit the time will be returned.
Returns
Requested value in the indicated units.

Definition at line 96 of file Timing.cpp.

96  {
97  static longlong sys_start = 0;
98  if ( 0 == sys_start ) {
100  longlong t = tickCount();
101  sys_start = 10*c - t;
102  }
103  return adjustTime(typ, sys_start);
104 }
GAUDI_API longlong tickCount()
Retrieve the number of ticks since system startup.
Definition: Timing.cpp:65
GAUDI_API longlong currentTime()
Retrieve absolute system time.
Definition: Timing.h:245
GAUDI_API longlong adjustTime(TimeType typ, longlong timevalue)
Convert time from OS native time to requested representation (Experts only)
Definition: Timing.cpp:37
std::string System::tempDirectory ( )

Definition at line 79 of file Environment.cpp.

79  {
80  // Return a user configured or systemwide directory to create
81  // temporary files in.
82  std::string dir;
83  if ( System::getEnv("TEMP", dir) ||
84  System::getEnv("TEMPDIR", dir) ||
85  System::getEnv("TEMP_DIR", dir) ||
86  System::getEnv("TMP", dir) ||
87  System::getEnv("TMPDIR", dir) ||
88  System::getEnv("TMP_DIR", dir)
89  )
90  return dir;
91  else
92  return homeDirectory();
93 }
GAUDI_API std::string getEnv(const char *var)
get a particular environment variable (returning "UNKNOWN" if not set)
Definition: System.cpp:550
GAUDI_API std::string homeDirectory()
Definition: Environment.cpp:60
STL class.
ThreadHandle System::threadSelf ( )
inline

thread handle "accessor"

Definition at line 112 of file System.h.

112 { return (void*)0; }
longlong System::tickCount ( )

Retrieve the number of ticks since system startup.

Returns
Requested value in the indicated units.

Definition at line 65 of file Timing.cpp.

65  {
66  longlong count = 10000;
67 #ifdef _WIN32
68  count *= ::GetTickCount(); // Number of milliSec since system startup
69 #else
70  struct tms buf;
71  count *= 10*times(&buf);
72 #endif
73  return count;
74 }
T count(T...args)
const std::string System::typeinfoName ( const std::type_info tinfo)

Get platform independent information about the class type.

Definition at line 299 of file System.cpp.

299  {
300  return typeinfoName( tinfo.name() );
301 }
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:299
T name(T...args)
const std::string System::typeinfoName ( const char *  class_name)

Definition at line 303 of file System.cpp.

303  {
304  std::string result;
305 #ifdef _WIN32
306  long off = 0;
307  if ( ::strncmp(class_name, "class ", 6) == 0 ) {
308  // The returned name is prefixed with "class "
309  off = 6;
310  }
311  if ( ::strncmp(class_name, "struct ", 7) == 0 ) {
312  // The returned name is prefixed with "struct "
313  off = 7;
314  }
315  if ( off > 0 ) {
316  std::string tmp = class_name + off;
317  long loc = 0;
318  while( (loc = tmp.find("class ")) > 0 ) {
319  tmp.erase(loc, 6);
320  }
321  loc = 0;
322  while( (loc = tmp.find("struct ")) > 0 ) {
323  tmp.erase(loc, 7);
324  }
325  result = tmp;
326  }
327  else {
328  result = class_name;
329  }
330  // Change any " *" to "*"
331  while ( (off=result.find(" *")) != std::string::npos ) {
332  result.replace(off, 2, "*");
333  }
334  // Change any " &" to "&"
335  while ( (off=result.find(" &")) != std::string::npos ) {
336  result.replace(off, 2, "&");
337  }
338 
339 #elif defined(__linux) || defined(__APPLE__)
340  int status;
341  auto realname = std::unique_ptr<char,decltype(free)*>( abi::__cxa_demangle(class_name, nullptr, nullptr, &status), std::free );
342  if (!realname) return class_name;
343 #if _GLIBCXX_USE_CXX11_ABI
344  static const std::regex cxx11_string{"std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > ?"};
345  result = std::regex_replace( realname.get(), cxx11_string, "std::string" );
346 #else
347  result = std::string{realname.get()};
348 #endif
349  // substitute ', ' with ','
350  static const std::regex comma_space{", "};
351  result = std::regex_replace( result, comma_space, "," );
352 #endif
353  return result;
354 }
T free(T...args)
STL class.
T replace(T...args)
T regex_replace(T...args)
T erase(T...args)
T find(T...args)
STL class.
T strncmp(T...args)
unsigned long System::unloadDynamicLib ( ImageHandle  handle)

unload dynamic link library

Definition at line 165 of file System.cpp.

165  {
166 #ifdef _WIN32
167  if ( !::FreeLibrary((HINSTANCE)handle) ) {
168 #elif defined(__linux) || defined(__APPLE__)
169  ::dlclose( handle );
170  if ( 0 ) {
171 #elif __hpux
172  // On HP we have to run finalization ourselves.....
173  Creator pFinalize = 0;
174  if ( getProcedureByName(handle, "_fini", &pFinalize) ) {
175  pFinalize();
176  }
177  HMODULE* mod = (HMODULE*)handle;
178  if ( 0 == ::shl_unload( mod->dsc.handle ) ) {
179  delete mod;
180  }
181  else {
182 #else
183  if (false){
184 #endif
185  return getLastError();
186  }
187  return 1;
188 }
GAUDI_API unsigned long getLastError()
Get last system known error.
Definition: System.cpp:246
GAUDI_API unsigned long getProcedureByName(ImageHandle handle, const std::string &name, EntryPoint *pFunction)
Get a specific function defined in the DLL.
Definition: System.cpp:191
void *(* Creator)()
Definition of the "generic" DLL entry point function.
Definition: System.h:37
longlong System::upTime ( TimeType  typ = Hour)

Maximum processing time left for this process.

Units of time since system startup in requested units.

Parameters
typIndicator or the unit the time will be returned.
Returns
Requested value in the indicated units.

Definition at line 107 of file Timing.cpp.

107  {
108  static longlong sys_start = 10*systemStart(microSec);
109  return adjustTime(typ, 10*currentTime(microSec)-sys_start);
110 }
GAUDI_API longlong systemStart(TimeType typ=Sec)
Maximum processing time left for this process.
Definition: Timing.cpp:96
GAUDI_API longlong currentTime()
Retrieve absolute system time.
Definition: Timing.h:245
GAUDI_API longlong adjustTime(TimeType typ, longlong timevalue)
Convert time from OS native time to requested representation (Experts only)
Definition: Timing.cpp:37
longlong System::userTime ( TimeType  typ = milliSec,
InfoType  fetch = Times,
long  pid = -1 
)

CPU user mode time of process in milliseconds.

CPU kernel time of process in milliseconds.

Parameters
typIndicator or the unit the time will be returned.
fetchIndicator of the information to be fetched. If Fetch_None, the information will not be updated.
pidProcess ID of which the information will be returned
Returns
Requested value in the indicated units.

Definition at line 157 of file Timing.cpp.

157  {
158  longlong usertime = 0;
159  KERNEL_USER_TIMES info;
160  if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) ) {
161  usertime = adjustTime(typ, info.UserTime );
162  }
163  return usertime;
164 }
GAUDI_API longlong adjustTime(TimeType typ, longlong timevalue)
Convert time from OS native time to requested representation (Experts only)
Definition: Timing.cpp:37
ProcessDescriptor * getProcess()
Retrieve Process structure.
long System::virtualMemory ( MemoryUnit  unit = kByte,
InfoType  fetch = Memory,
long  pid = -1 
)

Basic Process Information: priority boost.

Definition at line 212 of file Memory.cpp.

212  {
213  VM_COUNTERS info;
214  if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) )
215  return adjustMemory(unit, info.VirtualSize);
216  return -2;
217 }
GAUDI_API long adjustMemory(MemoryUnit typ, long value)
Convert time from kByte to requested representation (Experts only)
Definition: Memory.cpp:34
ProcessDescriptor * getProcess()
Retrieve Process structure.
long System::virtualMemoryLimit ( MemoryUnit  unit = kByte,
InfoType  fetch = Quota,
long  pid = -1 
)

System Process Limits: Maximum amount of the page file this process is allowed to use.

Definition at line 228 of file Memory.cpp.

228  {
229  QUOTA_LIMITS quota;
230  if ( fetch != NoFetch && getProcess()->query(pid, fetch, &quota) ) {
231  if ( long(quota.PagefileLimit) == -1 )
232  return -1;//LONG_MAX;
233  return adjustMemory(unit, quota.PagefileLimit);
234  }
235  return 0;
236 }
GAUDI_API long adjustMemory(MemoryUnit typ, long value)
Convert time from kByte to requested representation (Experts only)
Definition: Memory.cpp:34
ProcessDescriptor * getProcess()
Retrieve Process structure.
long System::virtualMemoryPeak ( MemoryUnit  unit = kByte,
InfoType  fetch = Memory,
long  pid = -1 
)

Basic Process Information: priority boost.

Definition at line 220 of file Memory.cpp.

220  {
221  VM_COUNTERS info;
222  if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) )
223  return adjustMemory(unit, info.PeakVirtualSize);
224  return -2;
225 }
GAUDI_API long adjustMemory(MemoryUnit typ, long value)
Convert time from kByte to requested representation (Experts only)
Definition: Memory.cpp:34
ProcessDescriptor * getProcess()
Retrieve Process structure.