2012-03-01 8 views
1

exec()またはsystem()またはの発信者によって生成されたメッセージを子プロセスに渡したいとします。変更envは1つの方法ですが、マルチスレッドプログラムでは、envをputenv()またはsetenv()で変更することは安全ではありません。私は子プロセスのargvによってそれを渡すことは許されていません。マルチスレッドプログラムでsystem()の情報を渡す

いくつかのファイルに何かを書くことは一つの選択ですが、特定のメッセージがどの親からどの子に送られるかをどのようにして識別できますか? 1つの方法は、親pidをメッセージに付加することであり、子はppidが一致するメッセージを見つけることができる。しかし、複数のスレッドがpopen()を呼び出すと、同じPIDを持つ複数のメッセージが表示されます。

+0

どのような言語を使用しますか?私はCだと思いますか?答えは言語に依存します:例えば、Pythonは 'popen()'の 'env'パラメータを持っています... – EOL

+0

はい、私はC.thxを使います – user1200759

答えて

0

私は専門家ではないけど、ここでの考え方は次のとおりです。

シェルを使用すると、「一時的な」環境変数を使用することができます。例えば、あなたは(zshで)できます:

% MSG="Hello" my_prog 
% echo $MSG 

% 

多分このようなことができますか?多分、これはあなたのコマンドをサブシェルで実行することを伴いますか?

0

popen()はおそらくあなたの友人です。私は、複数のスレッドがパイプを一度に書き留めないようにするためにロックを使用し、メッセージにスレッドID情報を付けることをお勧めします。

関連する問題