Listing 6 Redirects standard error

/* stderr.c:    Redirect stderr */
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#include <assert.h>
#include <sys/types.h>
#include <sys/stat.h>

static int old_handle = -1;

int redir_stderr(char *fname)
{
   int fd = open(fname,0_WRONLY|0_CREAT|0_TEXT,S_IWRITE);
   
   assert(fd >= 0);
   old_handle = dup(fileno(stderr));
   dup2(fd,fileno(stderr));
   close(fd);
   return fd;
}

void restore_stderr()
{
   if (old_handle != -1)
   {
      dup2(old_handle,fileno(stderr));
      close(old_handle);
      old_handle = -1;
   }
}
/* End of File */