如何使用C++读取另一个程序中的源代码输出



我认为这真的很难解释我想要什么。但是,让我试试。 (我正在尝试建立一个程序来评分学生的编程作业(

C++中有很多简单的源代码。(请认为有100多个代码文件(

// C:homework1studentA.cpp
int main()
{
cout << "The answer is 456" << endl;
}

这是个问题。如您所见,有大量的代码文件,我无法编译它并一一检查它是对还是错。因此,为了方便起见,我需要制作评分程序。

如何在另一个程序中读取标准输出(答案是 456(?是否有"编译源代码"和"保存标准输出"的功能?

我会为此使用 bash 脚本而不是C++。大致如下:

g++ $filename
./a.out > student_answer.txt
diff -q student_answer.txt expected_answer.txt

然后,$?会告诉你答案是否正确。

如何在另一个程序中读取标准输出(答案是 456(?

如果没有操作系统的帮助,您将无法做到这一点。因为您没有(通常,根据 C++17 标准(一些"其他程序"正在运行(阅读有关进程的信息(。当你有一个,请感谢你的操作系统。 阅读一些关于操作系统的教科书。

但是,在 Linux 上,你可以只使用 popen(3((或 fork(2(、execve(2(、pipe(7( so pipe(2(、dup2(2(、waitpid(2((和移植 Qt 的操作系统(包括 Windows,但请阅读 WinAPI(,您可以使用 QProcess。

如果你是偏执狂,可以考虑在 Linux 上使用 setuid 和/或 chroot 技术(可能使用 LXC(来提高工具的安全性。

另请查看 POCO 框架库。

最新更新