在多线程程序中向下传递system()的信息

时间:2012-03-01 02:14:57

标签: c multithreading thread-safety popen

我有来自exec()system()popen()的来电者生成的消息,并希望将其传递给子流程。更改env是一种方法,但在多线程程序中,更改putenv()setenv()的env并不安全。我不允许通过子进程的argv传递它。

将某些内容写入某个文件是一种选择,但我们如何识别哪一个特定的消息从哪个父项传递到哪个子项?一种方法是将父pid附加到消息中,并且子项可以找到具有ppid匹配的消息。但是当多个线程调用popen()时,会有几条带有相同pid的消息。

2 个答案:

答案 0 :(得分:0)

我不是专家,但这是一个想法:

Shell允许您使用“临时”环境变量。例如,您可以(在zsh中):

% MSG="Hello" my_prog
% echo $MSG

%

也许你可以做这样的事情?也许这会涉及在子shell中运行你的命令?

答案 1 :(得分:0)

popen()可能是你的朋友。我建议使用锁定来防止多个线程立即写下管道,并用线程ID信息标记你的消息。