程序输出可以通过程序本身重定向到管道吗?

标签 c linux pipe filestream

嗯,这是关于竞赛的计划。

我正在提交一个程序,发现我的指标在总执行速度方面比得分最高的人要慢得多。所有其他(页面错误、内存...)都是类似的。我发现当我在没有 printf(或 write)的情况下运行我的程序时,我的总执行速度(在我自己的电脑上测量)似乎相似。

比赛通过将输出(我想是用管道)重定向到一个文件并将其 MD5 与他们的 MD5 进行匹配来评估输出......

我的问题是,C 中是否有某种东西不会写入输出流,但管道仍然会获取其输入。或者也许我什至错误地提出了这个问题。但无论如何,我都陷入了困境。

我一直在努力优化算法。顺便说一句,他们接受许多人试图优化的 makefile。对我来说,这两个优化标志都不起作用。我也不知道还能做什么......

最佳答案

如果您需要编写一个将其输出写入文件的程序,您只需:

  • int fd = fopen("/file/path", O_WRONLY);打开文件(可能需要检查一下参数,好久没做C编程了),然后 write(fd, ...);fprintf(fd, ...);
  • 使用fopen打开文件,关闭标准输出并使用dup2()将文件描述符复制到文件描述符编号1(即标准输出)。

关于程序输出可以通过程序本身重定向到管道吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7487785/

相关文章:

linux - ack 忽略与正路径匹配结合的路径匹配的文件

linux - 将DICOM图像转换为PNG的最简单方法是什么?

linux - 如何从失败开始处理连续更新文件? .

android - Android 中的管道问题

c++ - 具有 C 链接和 C++ 实现的不透明结构

c++ - 为什么 C 风格的代码比 C++ 风格的代码更快

c - C中的.bmp处理

c - 如何找到二叉搜索树第 x 层的节点数(有限制)

linux - 在 bash 中,循环并发送命令来执行

angular - ngFor Angular2 中的动态管道