调用fclose(stdout);后,如何再开启标准输出

请看程序

#include <string.h>
#include <stdio.h>


int main(void)
{
   int i;
   /* redirect standard output to a file */
   if (freopen("name.txt", "w", stdout)
       == NULL)
      fprintf(stderr, "error redirectingstdout/n");

   /* this output will go to a file */
   printf("This will go into a file.");
  
   /* close the standard output stream */
  
   fclose(stdout);
   scanf( "%d", &i) ;
   printf("%d",i);  //这个语句没有用了,不能显示i的值了

   return 0;
}
 
解决方法:

在对stdout进行重定向之前拷贝一份stdout对应的文件描述符:

int fd_stdout = dup( fileno(stdout) );

在fclose(stdout)之后如果想恢复原来的stdout的话:

fdopen( fd_stdout, "w" );

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页