C++ 使用freopen后如何在stdout中写入
打开标准件后,如何在终端上打印C++ 使用freopen后如何在stdout中写入,c++,c,freopen,C++,C,Freopen,打开标准件后,如何在终端上打印 freopen("out", "w", stdout); // reopen stdout /* something */ printf("Now I want to print this on terminal"); 您可以通过以下方式完成: #include <fstream> ofstream out("out.txt"); out<<"something"; then cout<<"something";
freopen("out", "w", stdout); // reopen stdout
/* something */
printf("Now I want to print this on terminal");
您可以通过以下方式完成:
#include <fstream>
ofstream out("out.txt");
out<<"something";
then
cout<<"something";
我相信这就是你想要的: 没有可移植的解决方案。但是这个链接也解释了一个可能的解决方案,使用您自己的流和一个可以在大多数posix系统上工作的解决方案 没有好办法。如果您需要切换回,最好的解决方案是 一开始就没有使用过freopen。试着用你自己的 显式输出或输入流变量,您可以在 将,同时保持原始标准输出或标准输入不受干扰。对于 例如,声明一个全局
FILE *ofp;
并替换对printf的所有调用。。。使用fprintfofp。
显然,您还必须检查对putchar和puts的调用。
然后您可以将ofp设置为标准输出或其他任何设置
你可能想知道你是否可以完全跳过freopen,做点什么
像
让您自己能够在以后通过执行以下操作恢复stdout
stdout = savestdout; /* WRONG */
但是这样的代码不太可能工作,因为stdout和stdin
和stderr通常是不能重新分配的常量
这就是为什么freopen首先存在的原因
以一种不可移植的方式保存信息是可能的
在调用freopen打开某个文件之前,
以便以后可以恢复原始流。最
简单可靠的方法是操作底层文件
使用系统特定调用(如dup或dup2)的描述符,如果
可获得的另一种是复制或检查文件的内容
结构,但这是非常不可移植和不可靠的
在某些系统下,您可能可以重新打开一个特殊的设备文件
例如,Unix的现代版本下的/dev/fd/1,它仍然是
例如,附加到原始标准输出。你可以,在下面
一些系统,显式地重新打开控制终端,但是
不一定是您想要的,因为原始输入或输出
i、 在你打电话给弗罗普之前,斯丁或斯杜特是什么样的人
已从命令行重定向
代码比英语更容易理解-你应该发布它。在什么操作系统上?我相信Windows不一定允许这样做…@Matstpeterson在ubuntuThen的帖子上说你正在做的一个小例子,并解释您的预期和实际发生的情况。@DarkStream是否要先在文件中打印一些内容,然后再在控制台中打印一些内容?这并不是回答问题question@SHR当前位置让问这个问题的人说它是否在回答,也许它对你有用him@darkdream不客气,如果你要写这样的答案,至少使用stdio来与问题保持一致。否则,我们可能会遇到一个问题:如何在Java中做到这一点?A:用C代替。
stdout = savestdout; /* WRONG */