freopen & cout
Burak Serdar
bserdar@eos.ncsu.edu
Tue Dec 2 18:40:00 GMT 2003
Alex Vinokur wrote:
> Hi,
>
> Where has output-to-cout gone in the program below?
>
> Thanks,
>
> ========= C++ code : File foo.cpp : BEGIN =========
> #include <cstdio>
> #include <cassert>
> #include <iostream>
> #include <fstream>
> using namespace std;
>
> #define FILE_NAME "foobar"
>
> int main ()
> {
> ofstream ofs;
>
> remove (FILE_NAME);
>
> ofs.open (FILE_NAME);
> assert (ofs);
> assert (ofs.is_open());
>
> FILE* stdof = freopen (FILE_NAME, "w", stdout);
This call to freopen closes stdout, therefore you cannot print anything
using cout after this point.
> assert (stdof);
>
> cout << "to cout (first time)" << endl; // Problematic line
> ofs << "to ofs (first time)" << endl;
> cout << "to cout (second time)" << endl; // Problematic line
> ofs << "to ofs (second time)" << endl;
>
> ofs.close();
> assert (!ofs.is_open());
>
> int rc = fclose (stdof);
> assert (!rc);
>
> return 0;
> }
> ========= C++ code : File foo.cpp : END ===========
>
>
> ========= Compilation & Run : BEGIN =========
>
> $ g++ -v
> [---omitted---]
> gcc version 3.3.1 (cygming special)
>
> $ g++ -W -Wall foo.cpp
>
> $ a
> // No output; Where has output-to-cout gone?
>
> $ cat foobar
> to ofs (first time)
> to ofs (second time)
>
> ========= Compilation & Run : END ===========
>
>
> --
> =====================================
> Alex Vinokur
> mailto:alexvn@connect.to
> http://up.to/alexvn
> =====================================
>
>
>
>
>
>
>
>
>
>
More information about the Gcc-help
mailing list