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で指定した値、あるいはユーザーと同じ名前のデータベースが作成される。 今回の抜粋はその処理部分。