web-dev-qa-db-ja.com

setenv()を使用してC ++で変数をエクスポートする方法は?

コマンドラインで次のように見えるように、いくつかの変数をエクスポートする必要があります

export ROS_HOSTNAME=xxx

それを達成するためにC++でsetenv()を使用するにはどうすればよいですか?

ありがとう。

16
return 0

setenv()手動エントリから:

[〜#〜] synopsis [〜#〜]

_#include <stdlib.h>  
int setenv(const char *envname, const char *envval, int overwrite);
_

[〜#〜] description [〜#〜]
setenv()関数は、呼び出し元プロセスの環境で変数を更新または追加します。 envname引数は、追加または変更する環境変数の名前を含む文字列を指します。環境変数は、envvalが指す値に設定されます。 envnameが「=」文字を含む文字列を指す場合、関数は失敗します。 envnameで指定された環境変数がすでに存在し、overwriteの値がゼロ以外の場合、関数は成功を返し、環境が更新されます。 envnameで指定された環境変数が既に存在し、overwriteの値がゼロの場合、関数は成功を返し、環境は変更されないままになります。

アプリケーションがenvironまたはそれが指すポインターを変更する場合、setenv()の動作は未定義です。 setenv()関数は、environが指すポインターのリストを更新します。

Envnameおよびenvvalで記述された文字列は、この関数によってコピーされます。

Setenv()関数は再入可能である必要はありません。再入可能である必要のない関数は、スレッドセーフである必要はありません。

戻り値
正常に完了すると、ゼロが返されます。それ以外の場合、-1が返され、エラーを示すためにerrnoが設定され、環境は変更されません。

だからあなたは電話する必要があります

_setenv("ROS_HOSTNAME","xxx",1); // does overwrite
_

または

_setenv("ROS_HOSTNAME","xxx",0); // does not overwrite
_

あなたの場合。場合によっては、既存の定義を上書きするかどうかに依存します。

注:

setenv()を使用して、変数をプロセスから呼び出しプロセス(シェル)にエクスポートすることはできません! forkで作成された子プロセスは、現在のプロセスの環境定義を継承するため、変更や追加も同様に行われます。

22

ここで、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);

最後のブール引数は、環境変数の値が既に存在する場合に上書きするかどうかを示します。

0
elmadj

このように行う

_setenv("ROS_HOSTNAME", "xxx", true);
_

概要にも注意してください。

_#include <stdlib.h>

int setenv(const char *envname, const char *envval, int overwrite);
_

setenv()の詳細については、 this link を参照してください。

0
Shumail