/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ #include "qpid/sys/SystemInfo.h" #define BSD_COMP #include #include #undef BDS_COMP #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; namespace qpid { namespace sys { long SystemInfo::concurrency() { return sysconf(_SC_NPROCESSORS_ONLN); } bool SystemInfo::getLocalHostname(Address &address) { char name[MAXHOSTNAMELEN]; if (::gethostname(name, sizeof(name)) != 0) return false; address.host = name; return true; } static const string LOCALHOST("127.0.0.1"); static const string TCP("tcp"); void SystemInfo::getSystemId(std::string &osName, std::string &nodeName, std::string &release, std::string &version, std::string &machine) { struct utsname _uname; if (uname (&_uname) == 0) { osName = _uname.sysname; nodeName = _uname.nodename; release = _uname.release; version = _uname.version; machine = _uname.machine; } } uint32_t SystemInfo::getProcessId() { return (uint32_t) ::getpid(); } uint32_t SystemInfo::getParentProcessId() { return (uint32_t) ::getppid(); } string SystemInfo::getProcessName() { psinfo processInfo; char procfile[PATH_MAX]; int fd; string value; snprintf(procfile, PATH_MAX, "/proc/%d/psinfo", getProcessId()); if ((fd = open(procfile, O_RDONLY)) >= 0) { if (read(fd, (void *) &processInfo, sizeof(processInfo)) == sizeof(processInfo)) { value = processInfo.pr_fname; } } return value; } // Always true. Only Windows has exception cases. bool SystemInfo::threadSafeShutdown() { return true; } }} // namespace qpid::sys