19 #include <sys/types.h>
20 #include <sys/utsname.h>
30 ::sprintf( fname,
"/proc/%d/cmdline", ::getpid() );
31 FILE* cmdLine = ::fopen( fname,
"r" );
34 std::vector<std::string> result;
39 long len = ::fread( cmd,
sizeof(
char ),
sizeof( cmd ), cmdLine );
42 for (
char* token = cmd; token - cmd < len; token += ::strlen( token ) + 1 ) { result.push_back( token ); }
54 auto realname = std::unique_ptr<char, decltype( free )*>(
55 abi::__cxa_demangle( class_name,
nullptr,
nullptr, &status ), std::free );
56 if ( !realname )
return class_name;
59 static const std::regex cxx11_string{
60 "std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >( (?=>))?" };
61 std::string result = std::regex_replace( realname.get(), cxx11_string,
"std::string" );
64 static const std::regex comma_space{
", " };
65 result = std::regex_replace( result, comma_space,
"," );
72 static const size_t STRING_SIZE = 512;
73 std::array<char, STRING_SIZE> hname;
74 if ( ::gethostname( hname.data(), STRING_SIZE ) ) {
return ""; }
86 return std::string( hname.data() );
92 if ( ::uname( &ut ) ) {
return "UNKNOWN Linux"; }
93 return std::string( ut.sysname );
99 if ( ::uname( &ut ) ) {
return "UNKNOWN version"; }
100 return std::string( ut.release );
106 if ( ::uname( &ut ) ) {
return "UNKNOWN"; }
107 return std::string( ut.machine );
112 const char* acct = ::getlogin();
113 if ( !acct ) acct = ::getenv(
"LOGNAME" );
114 if ( !acct ) acct = ::getenv(
"USER" );
116 return ( acct ? acct :
"UNKNOWN" );