Redirecting stdout
    Bill Baxter 
    dnewsgroup at billbaxter.com
       
    Tue Dec  4 18:14:46 PST 2007
    
    
  
Robert Fraser wrote:
> I'd like at a particular point in my program to temporarily ignore all 
> stdout (i.e. not have it written to the stream)... is there a way to do 
> this? I want my program to work under both Phobos & Tango, so a way for 
> both libraries would be great.
> 
Phobos just uses the underlying C stream objects in the end, so you can 
use freopen on those.  Note that std.cstream functions will throw 
exceptions if the standard output streams are not open, so the code 
below freopens them to point to /dev/null or Nul.
Don't know if there's a better way, but this way has been working for me.
version(Tango) {
     ??
}
else {
     static this() {
         // redefine dout,derr,dlog to prevent IO exceptions
         version(Windows) {
             std.c.stdio.freopen("Nul", "w", dout.file);
             std.c.stdio.freopen("Nul", "w", derr.file);
         }
         else {
             std.c.stdio.freopen("/dev/null", "w", dout.file);
             std.c.stdio.freopen("/dev/null", "w", derr.file);
         }
     }
}
    
    
More information about the Digitalmars-d-learn
mailing list