【发布时间】:2018-03-27 04:19:26
【问题描述】:
我正在尝试编写一个 C 程序,该程序能够通过传入输入和测试输出来测试其他程序的性能,而无需在每次运行时重新启动程序。我和同事正在编写数独求解器,我正在编写程序来通过解决许多谜题来测试每个程序的运行速度,这些谜题可能都是不同的语言,我不想因为使用语言而惩罚人们,像Java一样,启动起来真的很慢。理想情况下,该程序将启动数独求解程序,使其保持运行,并不断通过stdin 传递一个新的谜题,并在stdout 中测试输出。
这是我想做的伪代码:
start a sudoku solver in another process
once process is running
pass puzzle string into child stdin
wait until output comes into stdout
repeat until end time limit ends
close process
我搞砸了popen,但我不知道如何写入子进程stdin。我在网上查了很多,还是没弄明白。
关于如何完成此任务的任何建议?我在 Linux 机器上运行它。不必一定是stdin 和stdout 进行交流,但这对其他人来说是最简单的。
【问题讨论】:
-
你需要花几周时间阅读更多关于 Unix 编程的知识,例如ALP 或一些新书。您基本上想了解 shell 的工作原理。大多数unix shells 或批处理处理器是free software,因此请研究它们的源代码。但是你的问题太宽泛了。
-
您还需要定义常见的约定和协议。还要查看
batch命令。 -
请注意,必须编写数独求解器以便它们循环,在有更多输入时解决问题。如果它们是为解决一个问题而编写的,那么除了重新启动它们之外,您无法明智地解决第二个问题。
-
@technosaurus 和
popen你只会得到一个单向管道。
标签: c linux performance process sudoku