2012-03-01 50 views
1

我有一個由調用者exec()system()popen()生成的消息,並且想將它傳遞給子進程。更改ENV是一種方式,但在多線程程序,通過putenv()setenv()改變ENV是不是安全。我不允許通過子進程的argv將它傳遞。在多線程程序中向系統傳遞信息()

寫的東西有些文件是一個選擇,但我們怎樣才能識別一個特定的消息是從哪個父通過,旨在哪個孩子?一種方法是將父pid添加到消息中,孩子可以通過ppid匹配找到消息。但是,當多個線程調用popen(),將有多個消息具有相同PID。

+0

你用什麼語言?我猜C?答案取決於語言:例如,Python對'popen()'有'env'參數... – EOL 2012-03-01 09:31:41

+0

是的,我使用C.thx – user1200759 2012-03-01 22:30:24

回答

0

我不是專家,但這裏有一個想法:

殼允許你使用「臨時」環境變量。例如,你可以做(​​在zsh):

% MSG="Hello" my_prog 
% echo $MSG 

% 

也許你可以做這樣的事情?也許這將涉及在一個子shell中運行你的命令?

0

POPEN()可能在這裏你的朋友。我建議使用鎖定來防止多個線程一次寫下管道,並使用線程ID信息標記消息。