Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用freopen后如何在stdout中写入_C++_C_Freopen - Fatal编程技术网

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 */