自动编写:从linux中的代码中捕获所有输出

时间:2015-01-24 08:34:07

标签: java linux

我正在尝试自动提交其他人提交的一些工作。假设可执行文件名为foo。它应该写入标准输出,但在某些情况下,令人讨厌的是,它会打开一个文件并写入该文件。

是否有某种方式(在linux中)运行foo以便所有输出,无论是写入文件还是标准输出,都是通过管道传输到标准输出?

我确实有提交的源代码,这些源代码都是Java。

(任何建议的标签最受欢迎。我不确定该选择什么。)

添加了备注

  • 我不能给写错地方的每个人0。我当然可以给他们一个不好的成绩,但这对我没有帮助。
  • 我不知道他们写信的地方。有些人似乎写入子目录中的文件。

1 个答案:

答案 0 :(得分:1)

This answer显示了如何使用您自己的代码包装write()系统调用。您可以对open()(和fopen()以及更多)执行相同的操作来捕获对文件的写入。 (点击它引用的早期问题,它有一个很好的讨论以及指向有关此技术的更多信息的指针。)我想在Windows上可能有类似的东西,尽管它们的术语必然略有不同。 (U * x libc流行语为LD_PRELOAD。)

同样,如果您的提交是源代码形式,您可以破解编译器来包装或替换相应的Java原语。如果您的学生是入门级的,则可能只需要识别和替换一些常用功能。但是,也许你可以在提交中只为他们grep做完。 (另一方面,初学者更有可能偶然发现一个网页,它以某种方式说服他们需要编写自己的操作系统才能写入标准输出......)