この記事では環境変数とは?から、C++のプログラムから環境変数を使用する方法まで解説していきます。
本記事で使用している環境は以下です。
・Ubuntu 24.04 LTS
・C++17
環境変数とは
環境変数は、オペレーティングシステムとアプリケーションの動作を制御するために使用される変数です。キーと値のペアになっており、システム全体またはユーザ単位で設定され、システムの設定情報やアプリケーションに影響を与えることができます。
環境変数の役割
- 設定情報の提供
-
システムやアプリケーションが動作するための設定情報を提供します。例えば、プログラムが使用するディレクトリのパスや、動作モードなどを設定できます。
- アプリケーション間の情報共有
-
複数のアプリケーション間で共通の情報を共有するために使用されます。
envコマンドを使用すれば、現在のシェル環境で設定されている環境変数を表示したり、一時的に環境変数を設定してコマンドを実行したりできます。
env
上記のコマンドを実行してみると、以下のように設定されている環境変数一覧を確認できます。
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
HOME=/home/username
USER=username
SHELL=/bin/bash
LANG=en_US.UTF-8
...
プログラムから環境変数の使い方
C++のプログラムから環境変数を取得したり、編集したりしてみましょう。
環境変数の取得
#include <cstdlib>
#include <iostream>
int main() {
const char* path = std::getenv("PATH");
if (path) {
std::cout << "PATH: " << path << std::endl;
} else {
std::cout << "PATH environment variable is not set." << std::endl;
}
return 0;
}
解説
環境変数を操作するgetenv
などの関数を使用するためにcstdlib
ライブラリをインクルードします。
const char* path = std::getenv("PATH");
この部分では、getenv
関数を使用して環境変数PATH
を取得しています。getenv
関数は対象の環境変数への文字列型ポインタを返します。
環境変数の設定
#include <cstdlib>
#include <iostream>
int main() {
// 環境変数を設定
if (setenv("MY_VAR", "my_value", 1) != 0) {
std::cerr << "Failed to set environment variable" << std::endl;
return 1;
}
// 環境変数を取得して表示
const char* my_var = getenv("MY_VAR");
if (my_var) {
std::cout << "MY_VAR: " << my_var << std::endl;
} else {
std::cout << "MY_VAR is not set." << std::endl;
}
return 0;
}
解説
環境変数の設定にはsetenv関数を使用します。この例では環境変数MY_VAR
をmy_value
に設定します。第三引数の1
は、すでに存在する環境変数を上書きすることを示します。
環境変数の削除
#include <cstdlib>
#include <iostream>
int main() {
// 環境変数を設定
if (setenv("MY_VAR", "my_value", 1) != 0) {
std::cerr << "Failed to set environment variable" << std::endl;
return 1;
}
// 環境変数の削除
unsetenv("MY_VAR");
// 環境変数を取得して表示
const char* my_var = getenv("MY_VAR");
if (my_var) {
std::cout << "MY_VAR: " << my_var << std::endl;
} else {
std::cout << "MY_VAR is not set." << std::endl;
}
return 0;
}
解説
環境変数の削除にはunsetenv
関数を使用します。使い方は簡単で、引数に削除したい環境変数を指定するだけです。
最後に
今回は環境変数の概要とC++のプログラムからの操作方法について紹介しました。