2012-02-03 10 views
2

小さなシェルを作成して、ユーザーが 'ls'のようなコマンドを入力させ、コード内でexecv()を使用すると思われるディレクトリの内容を表示します。ユーザーが 'set name = "bob"'のようなものを入力したときにはうまくいかないようです。私は、ユーザがそれを入力したときにsetコマンドを実行するために自分のコードで使うべきものを探していましたが、私が見つけた最高のものがsystem()ですが、それでも私にとってはうまくいきません。何か案は?CプログラムでSETコマンドを実行

+0

これは私の学校初年度プロジェクトのようです。全面的に... – Eregrith

+0

あなたの主張は何ですか? – user1186710

答えて

0

fork-and-execまたはsystem()を実行しているので、コマンドは実際は別のプロセスで実行されています。そのプロセス(環境変数の設定など)で起こることは、親の環境に影響を与えません。 (別の問題setが実際に環境変数を作成しないということです。あなたはそれを行うには、[T] cshの中で[BA] shまたはsetenvexportを必要とするでしょう。)

ですから、あなたのミニをコーディングする必要がありますシェルを別のプログラムに渡すのではなく、setコマンドを明示的に処理します。

1

setはシェルコマンドであり、外部コマンドではありません(実際には、シェルプロセス内のシェル変数を変更するための効果が必要です)。

これは、シェル変数を追跡する内部データ構造に名前付き変数を追加する(または既に存在する場合は更新する)ことにより、シェル自体内でsetを検索して処理する必要があることを意味します。

+0

これは私のミニセットに組み込みのsetコマンドを書く必要があることを意味し、組み込みのsetコマンドに似た何かをするでしょうか? – user1186710

+0

@ user1186710:あなたが 'set'をサポートしたいのなら、そうです。 – caf

+0

ありがとう! – user1186710

0

setenv(3)とgetenv(3)を参照してください。これらは、Cプログラム内から環境変数を変更して読み込むための関数です。

+0

しかし、それは私が変数を作成することはできませんか? – user1186710

+0

マニュアルページから: "setenv()関数は_valueという値を持つ変数_nameを環境変数に追加します。"そう、そうです。 – user732933

関連する問題