/* * redir.c: sample program showing how to redirect stdout and process * the argument vector. * * Stefan Brandle, COS 421, February 2000. */ #include #include #include int main( int argc, char *argv[], char *envp[] ) { int redir_fd; /* File descriptor holder for argv[1] */ if( argc != 2 ) { fprintf( stderr, "%s: usage is '%s OutputFileForStdout'\n", argv[0], argv[0] ); return 1; } /* * Now get to work. Duplicate stdout to argv[1]. Steps: * 1) First open argv[1] & make sure that opened. * 2) Then dup2() argv[1] file descriptor onto stdout file descriptor. * We now have 2 file descriptors pointing to the same place (argv[1]). * 3) Then close argv[1] file descriptor. Stdout is left pointing to * argv[1]. */ redir_fd = open( argv[1], O_CREAT|O_WRONLY|O_TRUNC ); if( redir_fd == -1 ) { fprintf( stderr, "%s: error openning file %s.\n", argv[0], argv[1] ); return 2; } if( dup2( redir_fd, 1 ) == -1 ) { fprintf( stderr, "%s: error performing dup2 on %s.\n", argv[0], argv[1] ); return 3; } close( redir_fd ); /* Now to write to stdout and have it show up in argv[1] */ printf( "Look, mom, redirected file I/O!\n." ); return 0; }