getenvの使い方
PostgreSQLを題材にシステムプログラミングを学ぼうと思う。
初めは簡単なところからということで、getenv関数について。
題材はPostgreSQL 10.0のコード。
getenvはstdlib.hに含まれるライブラリ関数です。その名の通りに引数にとった環境変数の値のポインタを取得。
取得できなかった場合はNULLを返す。
下記は、src/bin/scripts/createdb.cから抜粋。
NULLの場合を考慮して、if(gettnv("FOO"))という書き方になっているのが分かります。
if (dbname == NULL)
{
if (getenv("PGDATABASE"))
dbname = getenv("PGDATABASE");
else if (getenv("PGUSER"))
dbname = getenv("PGUSER");
else
dbname = get_user_name_or_exit(progname);
}
因みに、PostgreSQLではcreatedbコマンドを引数なしで実行すると
PGDATABASEで指定した値、あるいはユーザーと同じ名前のデータベースが作成される。
今回の抜粋はその処理部分。