# Poco

# class Environment

Library: Foundation
Package: Core
Header: Poco/Environment.h

## Description

This class provides access to environment variables and some general system information.

Thread Safety: The get(), has(), and set() methods are internally synchronized and safe to call concurrently. However, on POSIX platforms, concurrent use of the C library functions getenv()/setenv() from other code (e.g. third-party libraries) is NOT safe. POSIX setenv() may reallocate environment variable entries, invalidating pointers returned by a concurrent getenv() in another thread. Callers that mix Poco::Environment with direct environment variable access must provide their own external synchronization.

## Member Summary

Member Functions: arch, get, has, isUnix, isWindows, libraryVersion, nodeId, nodeName, os, osArchitecture, osDisplayName, osName, osVersion, processorCount, set

## Types Aliases

### NodeId

using NodeId = UInt8[6];

Ethernet address.

## Member Functions

### arch

static Poco::Int32 arch();

Return the underlying cpu architecture that runs this operating system as defined in Foundation/Platform (POCO_ARCH)

### get

static std::string get(
const std::string & name
);

Returns the value of the environment variable with the given name. Throws a NotFoundException if the variable does not exist.

### get

static std::string get(
const std::string & name,
const std::string & defaultValue
);

Returns the value of the environment variable with the given name. If the environment variable is undefined, returns defaultValue instead.

### has

static bool has(
const std::string & name
);

Returns true if and only if an environment variable with the given name is defined.

### isUnix

static bool isUnix();

Return true if the operating system belongs to the Linux family

### isWindows

static bool isWindows();

Return true if the operating system belongs to the Windows family

### libraryVersion

static Poco::UInt32 libraryVersion();

Returns the POCO C++ Libraries version as a hexadecimal number in format 0xAABBCCDD, where

- AA is the major version number,
- BB is the minor version number,
- CC is the revision number, and
- DD is the patch level number.

Some patch level ranges have special meanings:

- Dx mark development releases,
- Ax mark alpha releases, and
- Bx mark beta releases.

### nodeId

static void nodeId(
NodeId & id
);

Returns the Ethernet address of the first Ethernet adapter found on the system.

Throws a SystemException if no Ethernet adapter is available.

### nodeId

static std::string nodeId();

Returns the Ethernet address (format "xx:xx:xx:xx:xx:xx") of the first Ethernet adapter found on the system.

Throws a SystemException if no Ethernet adapter is available.

### nodeName

static std::string nodeName();

Returns the node (or host) name.

### os

static Poco::Int32 os();

Return the operating system as defined in the include Foundation/Platform.h (POCO_OS)

### osArchitecture

static std::string osArchitecture();

Returns the operating system architecture.

### osDisplayName

static std::string osDisplayName();

Returns the operating system name in a "user-friendly" way.

Currently this is only implemented for Windows. There it will return names like "Windows XP" or "Windows 7/Server 2008 SP2". On other platforms, returns the same as osName().

### osName

static std::string osName();

Returns the operating system name.

### osVersion

static std::string osVersion();

Returns the operating system version.

### processorCount

static unsigned processorCount();

Returns the number of processors installed in the system.

If the number of processors cannot be determined, returns 1.

### set

static void set(
const std::string & name,
const std::string & value
);

Sets the environment variable with the given name to the given value.