我有一个 C 程序,它从 stdin 读取并执行一些操作。我被要求定期(每 20 秒)输入信息,并在进行一些测试时保持用户交互不变。
不修改 C 程序就可以做到这一点吗?我已经编写了一个 shell 脚本,该脚本会定期回显信息(到其 stdout),因此想法是将此 shell 和正常 stdin 连接到仅一个 stdin(反向 T 形)。
我尝试了 (./periodic.sh; cat) > ./myprogram ,但它不起作用,因为它正在等待脚本结束(反之亦然)。
答案1
为了实现这一点,您可以在中间使用“套接字”。您可以设置一个套接字文件(例如/tmp/program.socket
,然后调整您的程序以从该文件而不是标准输入读取)。
然后,您可以根据需要让任意数量的程序写入上述套接字。
答案2
您的脚本没有运行,并不是因为“。/myprogram”正在等待您的脚本结束,而是因为“。/myprogram”正在等待您在子 shell“(...)”中启动的无限期“cat”结束。
尽管您的问题非常模糊,但我猜您需要学习如何使用管道。
mkfifo mypipe
while true; do
./periodic.sh > mypipe &
./myprogram < mypipe
done
该代码将永远等待您对“。/periodic.sh”的输入,一旦您提供该输入,它将被传递到管道“mypipe”(在后台),然后“。/myprogram”将处理其输出。
希望这就是您一直在寻找的。正如我之前所说,您的问题有点模糊。
玩得开心。