小さなシェルを作成して、ユーザーが 'ls'のようなコマンドを入力させ、コード内でexecv()を使用すると思われるディレクトリの内容を表示します。ユーザーが 'set name = "bob"'のようなものを入力したときにはうまくいかないようです。私は、ユーザがそれを入力したときにsetコマンドを実行するために自分のコードで使うべきものを探していましたが、私が見つけた最高のものがsystem()ですが、それでも私にとってはうまくいきません。何か案は?CプログラムでSETコマンドを実行
答えて
fork-and-execまたはsystem()を実行しているので、コマンドは実際は別のプロセスで実行されています。そのプロセス(環境変数の設定など)で起こることは、親の環境に影響を与えません。 (別の問題set
が実際に環境変数を作成しないということです。あなたはそれを行うには、[T] cshの中で[BA] shまたはsetenv
でexport
を必要とするでしょう。)
ですから、あなたのミニをコーディングする必要がありますシェルを別のプログラムに渡すのではなく、set
コマンドを明示的に処理します。
set
はシェルコマンドであり、外部コマンドではありません(実際には、シェルプロセス内のシェル変数を変更するための効果が必要です)。
これは、シェル変数を追跡する内部データ構造に名前付き変数を追加する(または既に存在する場合は更新する)ことにより、シェル自体内でset
を検索して処理する必要があることを意味します。
これは私のミニセットに組み込みのsetコマンドを書く必要があることを意味し、組み込みのsetコマンドに似た何かをするでしょうか? – user1186710
@ user1186710:あなたが 'set'をサポートしたいのなら、そうです。 – caf
ありがとう! – user1186710
setenv(3)とgetenv(3)を参照してください。これらは、Cプログラム内から環境変数を変更して読み込むための関数です。
しかし、それは私が変数を作成することはできませんか? – user1186710
マニュアルページから: "setenv()関数は_valueという値を持つ変数_nameを環境変数に追加します。"そう、そうです。 – user732933
- 1. cプログラムでLinuxコマンドを実行
- 2. PerlでSETコマンドを実行しています
- 3. C#でコマンドを実行する
- 4. linuxコマンドをcで実行する
- 5. Cプログラム内からプログラムを実行
- 6. Cで別のコンピュータでプログラムを実行
- 7. SQL * PLUS SETコマンド
- 8. set listコマンドをvi
- 9. AndroidでCプログラムを実行中
- 10. C - RAMでプログラムを実行する
- 11. セグメンテーションフォールト:Cプログラム実行時に
- 12. Eclipseコンソールでコマンドをプログラムで実行する
- 13. シェルスクリプト:シェルスクリプトでexitコマンドを実行した後でコマンドを実行
- 14. c#GPGコマンドを実行するアプリケーション
- 15. Primefacesを使用してプログラムでコマンドを実行する
- 16. javaで外部プログラムを実行してコマンドを渡す
- 17. FoxPro SET DEFAULT TOコマンド
- 18. AndroidプログラムでLinux端末コマンドを実行する
- 19. 新しいコマンドラインウィンドウでプログラムを実行するbashコマンド
- 20. LinuxのCプログラムから複数のCプログラムを実行する
- 21. 別のプログラムの下でCプログラムを実行する方法
- 22. Cプログラムのgdbへのコマンド
- 23. Javaでlinuxコマンドを実行
- 24. vimでコマンドを実行
- 25. WebSQLでPRAGMAコマンドを実行
- 26. sudoでコマンドを実行
- 27. サイレントモードでKdiff3コマンドを実行
- 28. symfonyでphpコマンドを実行
- 29. Redis:データが改行文字で始まる場合のSETコマンド
- 30. AndroidシステムでC/C++プログラムをコンパイルして実行するには
これは私の学校初年度プロジェクトのようです。全面的に... – Eregrith
あなたの主張は何ですか? – user1186710