2016-07-05 5 views
1

にとunsetenv()を実装するように(プロジェクトとして)依頼されました。グローバル変数 'c​​har ** environ'を使用してsetenv()とunsetenv()を実装する

私は建物のミニシェルのためにこれをやっています。私はを実装するために使用したため、環境変数に直接アクセスできることを知っています(extern char **environ)。

私の質問は、上記の環境変数にどのように値を追加するのですか?

私はコードを書く必要はありません。どのように役立つ場所へのリンクかリンクするだけで、私は実装を行うためにenvironを使うことができます。

私はどこにでも見えて、何も見つかりませんでした。ありがとう。

答えて

1

このようなenviron作品に新しい変数を追加:

  1. 環境に含まれる変数の数を数えます。この番号はに保存してください。
  2. n + 2ポインタをcharに割り当てます。
  3. オリジナルのenvironを新しい環境にコピーします。
  4. 最後に新しい変数を追加します。
  5. \0で配列を終了するのを忘れないでください。
  6. 新しいアレイを指すようにenvironを設定します。
  7. 前にenvironを割り当てた場合は、freeとなります。独自のシェルで

、あなたがenvironすべての時間のための新しいバッファを割り当てる必要がないことを確認するために、独自の簿記を行うことができます(少し大きめの配列を割り当て、どのように多くの項目のタブを保つことによって、たとえば無料です)。

+0

非常に有益なアドバイスに感謝します。 – adot

0

あなたは(コードをしたくないので、

http://man7.org/tlpi/code/online/book/proc/setenv.c.html

あなたはsetevnが順番にこれを行うには__add_to_environ内部関数を使用する、内部putenvを使用していることを見ることができます両方ここでのコードを参照してください:

http://osxr.org:8080/glibc/source/stdlib/setenv.c

+0

ありがとう、コードは分かりやすいほどシンプルです。しかし、それは私の問題(unsetenv())のうちの1つを解決するだけで、私はsetenv()を作成するためにputenv()を使うことはできません。ありがとうございました。 @ lshayPeled – adot

+0

あなたは '__add_to_environ'を参照する必要はありません –