[英]Confused how stdin, stdout and stderr work
我有下面的程序,
void Print()
{
printf("\nCall from Print\n");
}
int main()
{
FILE * pFile;
char mystring [100];
pFile = freopen ("myfile.txt" , "r", stdin);
if (pFile == NULL)
{
perror ("Error opening file");
}
else
{
if ( fgets (mystring , 100 , pFile) != NULL )
{
freopen("myfile.txt" , "a", stdout);
Print();
printf("Here it is\n");
//puts (mystring);
}
fclose(stdout);
fclose (pFile);
}
printf("Hello World\n");
return 0;
}
现在,当我执行程序时,在控制台窗口中看不到输出。 所有输出都重定向到myfile.txt
文件中。 我希望输出也应同时出现在console
和myfile.txt
。
毕竟,为什么在控制台中没有打印出printf("Hello World\\n")
。 也要如何在控制台上打印它?
我正在Windows 7,Visual Studio-2010中工作
最简单的方法是通过手动打印到stdout
(原始文件,以将其输出到控制台)和文件上,使其更加明确。
通过重新打开stdout
指向文件,可以删除与控制台窗口的连接,这就是为什么没有输出的原因。
您也只能使用stdout
,并使用诸如tee
的外部工具将输出复制到文件中。
的
freopen("myfile.txt" , "a", stdout);
会将您的stdout
输出输出到文件myfile.txt
此功能会将输出从控制台重定向到文件myfile.txt
即使您使用fclose(stdout);
,这不会将stdout的输出返回到控制台,只会关闭myfile.txt
有关更多详细信息,请参见以下链接。 在C中重定向stdout时的奇怪行为
为了同时在控制台和文件中获得输出,必须保持stdout freaopen()
,不要使用freaopen()
重新打开它,也不要关闭它。 并且您必须在文件和标准输出中将消息打印两次
我也曾经遇到过这样的要求。
我已经为此类打印日志制作了一个宏。 该打印宏扩展了一个功能,该功能根据某些控制变量设置在我的日志文件和stdout或stderr中打印该消息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.