c - 检查另一个程序的输出的程序

标签 c linux windows ipc pipe

我正在组织一场编程比赛。我需要创建一个程序来逐个字符地检查另一个程序(参与者的可执行文件)的输出。要求是:

  • 程序必须平台无关
  • 参与者不得获得输入和正确的输出。参与者所做的就是将其程序的名称传递给检查者。检查器会告诉你答案是否正确,仅此而已。
  • 不得向参与者本人展示参与者程序的输出 - 否则他可能会据此计算出输入。

对于第二部分,是否可以以某种方式将输入和输出存储在可执行文件本身中?我不想从加密文件中读取..这让事情有点不方便..

程序应该像这样工作:

checker.exe question1.exe

Correct answer, congratulations!

Please show this to a volunteer.

我尝试使用标准 C 库中的 popenpclose 函数。

但问题是,在 Linux 中,它会打开一个 shell,显示参与者程序的输出,而根据第三个要求,这不应该发生。

什么是完成此任务的简单方法?提前致谢。

编辑:

我需要将针对每个问题制作的可执行文件专门交给参与者。

最佳答案

是的,很容易不在 shell 中存储信息...只需使用管道。

例如

  $ question | checker

检查器可以打印它是否有效。这一切都发生在内存中。

<小时/>

如果您希望用户能够自己执行此操作,只需将此代码放入脚本文件中,设置该文件,以便用户只能执行和读取权限。然后将脚本设置为以 su 身份运行。然后脚本可以进行检查(即运行检查器 - 或进行比较)。如果需要比较,数据文件可以位于脚本外部,并且用户没有该文件的权限,则他们无法读取数据。

关于c - 检查另一个程序的输出的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15263548/

相关文章:

c - fgetpos() 行为取决于换行符

c - 下面的C语言代表什么

linux - 未使用的 pthread 互斥锁或条件变量分配哪些资源?

c - 如何声明将在不同位置调用的导出函数?

Windows V4 驱动程序 - 多个副本

c# - MonoDevelop 在 Linux 上错误地报告我的平台

python - 腌制 C 扩展

c - fscanf() 导致段错误

linux - 如何获取使用 perf stat 运行的程序的退出代码?

c - Linux 中的 Pthread