我正在尝试自动提交其他人提交的一些工作。假设可执行文件名为foo
。它应该写入标准输出,但在某些情况下,令人讨厌的是,它会打开一个文件并写入该文件。
是否有某种方式(在linux中)运行foo
以便所有输出,无论是写入文件还是标准输出,都是通过管道传输到标准输出?
我确实有提交的源代码,这些源代码都是Java。
(任何建议的标签最受欢迎。我不确定该选择什么。)
添加了备注
答案 0 :(得分:1)
This answer显示了如何使用您自己的代码包装write()
系统调用。您可以对open()
(和fopen()
以及更多)执行相同的操作来捕获对文件的写入。 (点击它引用的早期问题,它有一个很好的讨论以及指向有关此技术的更多信息的指针。)我想在Windows上可能有类似的东西,尽管它们的术语必然略有不同。 (U * x libc
流行语为LD_PRELOAD
。)
同样,如果您的提交是源代码形式,您可以破解编译器来包装或替换相应的Java原语。如果您的学生是入门级的,则可能只需要识别和替换一些常用功能。但是,也许你可以在提交中只为他们grep
做完。 (另一方面,初学者更有可能偶然发现一个网页,它以某种方式说服他们需要编写自己的操作系统才能写入标准输出......)