コマンドラインで次のようになるように、いくつかの変数をエクスポートする必要があります
export ROS_HOSTNAME=xxx
それを達成するために c++ で setenv() を使用するにはどうすればよいですか?
ありがとう。
コマンドラインで次のようになるように、いくつかの変数をエクスポートする必要があります
export ROS_HOSTNAME=xxx
それを達成するために c++ で setenv() を使用するにはどうすればよいですか?
ありがとう。
setenv()
マニュアル エントリから:
あらすじ
#include <stdlib.h> int setenv(const char *envname, const char *envval, int overwrite);
説明
setenv() 関数は、呼び出しプロセスの環境で変数を更新または追加します。envname 引数は、追加または変更する環境変数の名前を含む文字列を指します。環境変数は、envval が指す値に設定されます。envname が「=」文字を含む文字列を指している場合、関数は失敗します。envname で指定された環境変数が既に存在し、overwrite の値がゼロ以外の場合、関数は成功を返し、環境が更新されます。envname で指定された環境変数が既に存在し、overwrite の値がゼロの場合、関数は成功を返し、環境は変更されません。アプリケーションが、environ またはそれが指すポインターを変更した場合、setenv() の動作は未定義です。setenv() 関数は、environ が指すポインターのリストを更新します。
envname と envval で記述された文字列は、この関数によってコピーされます。
setenv() 関数は再入可能である必要はありません。再入可能である必要のない関数は、スレッドセーフである必要はありません。
戻り値
正常に完了すると、0 が返されます。それ以外の場合は、-1 が返され、エラーを示すために errno が設定され、環境は変更されません。
だからあなたは電話するべきです
setenv("ROS_HOSTNAME","xxx",1); // does overwrite
また
setenv("ROS_HOSTNAME","xxx",0); // does not overwrite
あなたの場合。おそらく既存の定義を上書きしたい場合は依存します。
ノート:
setenv()
プロセスから呼び出しプロセス (シェル) に変数をエクスポートするために使用することはできません! fork で作成された子プロセスは、現在のプロセス環境定義を継承するため、変更や追加も継承されます。
このようにしてください:
setenv("ROS_HOSTNAME", "xxx", true);
あらすじにも注意してください。
#include <stdlib.h>
int setenv(const char *envname, const char *envval, int overwrite);
の詳細については、このリンクを参照してくださいsetenv()
。
ここに setenv 関数の署名があります
#include <stdlib.h>
int setenv(const char *envname, const char *envval, int overwrite);
リンク : http://pubs.opengroup.org/onlinepubs/009695399/functions/setenv.html
あなたの場合、次のように呼び出します:
setenv("ROS_HOSTNAME", "xxx", true);
最後のブール引数は、環境変数の値が既に存在する場合に上書きするかどうかを示します。