0

文字列をPATH環境変数に追加するCプログラムを書きたいです。「export PATH=$PATH:$HOME/mylib」のようなもの

私はこのようなCコードを持っています

setenv("PATH", "$PATH:$HOME/mylib",1); //これは機能しません。

私が考えた他の作業は、getenv()を使用してPATHとHOMEを取得し、ヒープにメモリを作成してから、strcat()を使用してそれらを追加することでした。

コード内で PATH を何度も更新しなければならない場合があるため、これは面倒なプロセスです。

代替手段はありますか?

ありがとう

4

3 に答える 3

2

という$FOO名前の環境変数の値に展開される構文FOOは、シェルの機能です。C では直接利用できません。

システムがwordexp()関数を提供している場合があります。この関数は、C で同様の機能を提供します。

"HOME"ただし、固定名 (および)を持つ 2 つの環境変数を展開しているだけなので、ポータブル関数と少しの文字列処理"PATH"を使用する方が理にかなっています。(またはの代わりにgetenv()使用することを検討してください。)sprintfsnprintfstrcat

注: update を$PATHプログラムの内部でのみ使用している場合は、ここで読むのをやめてください。

$PATHプログラムの実行が終了した後、コマンド ラインで変更が可能になるとは思わないでください。実行中の C プログラムは、おそらく対話型シェルの子プロセスです。環境変数は子プロセスに継承されます。それらは親プロセスに伝播しません。

それがあなたがやろうとしていることである場合、プログラムに新しいPATH値を標準出力に出力させてから、シェルにそれを評価させることができます:

PATH=`your-program`

または、1 つまたは複数の環境変数を設定するコマンドを出力できます。

eval `your-program`

$(your-program)(bash では、と同様に使用できます`your-program`。)

于 2012-12-28T05:02:53.717 に答える
1

いいえ、代替手段はありません。リテラル文字列を作成してsetenvに渡す必要があります。

于 2012-12-28T03:10:05.797 に答える
1

すぐに利用できる他のオプションはありません。複数回実行する必要がある場合は、これを処理する別の関数を作成できます。

于 2012-12-28T03:11:40.877 に答える