how to redirect back to stdout


 
Thread Tools Search this Thread
Top Forums Programming how to redirect back to stdout
# 1  
Old 02-15-2009
how to redirect back to stdout

In my program, I am using library provided by other. In the library, the cout/cerr is redirected to a file (the file path is known).

After I call some methods in the library, I get one side-effect --> The cout/cerr in my own program is also directed to the file.

So how can I to redirect cout/cerr BACK to standand output again? (BTW, my OS is Linux, and the programing language is C++)
# 2  
Old 02-15-2009
You need to make a copy of stderr with dup() before the redirection happens, then copy it overtop of your own stderr after the redirection with dup2().
# 3  
Old 02-16-2009
thanks for your answer, Corona688. yes, this is a way.

are the any other ways if I am not convenient (i.e. have no chance) to make a copy of stderr with dup() before the redirection happens?
# 4  
Old 02-17-2009
Doing this in C++ is the same as doing this in C since the system calls are all the same.

stdin is probably the same terminal, but since it's opened with the wrong file mode duplicating it won't work right. But you might be able to figure out what the terminal at least is:
Code:
$ ls -l /dev/fd/0
lrwx------ 1 monttyle monttyle 64 Feb 17 09:15 /dev/fd/0 -> /dev/pts/1
$

If you don't have that, try /dev/stdin or /proc/self/fd/0

You can retrieve the same info in your C/C++ program with the readlink() call, then open the terminal and re-duplicate it over stdout and stderr.

This, of course, won't work when stdin was never a terminal, so be careful to not let your program do crazy things when you pipe or redirect into it.
# 5  
Old 02-17-2009
You can first call isatty() on each file descriptor: 0, 1 to see if it is a terminal or not.
# 6  
Old 02-18-2009
thanks a lot, guys.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Bizzare behavior on redirect of stdout

Oracle Linux 5.6 64-bit (derivative of RHEL) Dear Ann Landers, This is about as bizarre as anything I've ever seen. I have a little test script I've been working with. When I redirect stdout to a file, no file. Make a copy of the script to another name. Execute it and redirect stdout, and... (4 Replies)
Discussion started by: edstevens
4 Replies

2. Red Hat

Redirect STDOUT and STDERR of chsh

EDIT: Nevermind, figured it out! Forgot to put backslashes in my perl script to not process literals! Hi everyone. I am trying to have this command pass silently. (no output) chsh -s /bin/sh news Currently it outputs. I've tried.... &> /dev/null 1> /dev/null 2>&1 /dev/null 1>&2... (1 Reply)
Discussion started by: austinharris43
1 Replies

3. Shell Programming and Scripting

redirect STDOUT to a file in a subshell

Hi, I would like to avoid re-directing line by line to a file. What is the best way to re-direct STDOUT to a file in a subshell? Thanks in advance. Cheers Vj (1 Reply)
Discussion started by: tnvee
1 Replies

4. Programming

redirect stdout

hello again! i use dup2 to redirect stdout. I run what i want, now i want undo this redirection. how can i do that? thanx in advance (7 Replies)
Discussion started by: nicos
7 Replies

5. UNIX for Dummies Questions & Answers

How to put the STDOUT back to terminal

I have put the file descriptor 1 to file, using command exec 1>>out.txt Then I could not see any output on the screen, how could I restore the default output to terminal? :mad: Thanks (3 Replies)
Discussion started by: biglau
3 Replies

6. Shell Programming and Scripting

How to redirect stderr and stdout to a file

Hi friends I am facing one problem while redirecting the out of the stderr and stdout to a file let example my problem with a simple example I have a file (say test.sh)in which i run 2 command in the background ps -ef & ls & and now i am run this file and redirect the output to a file... (8 Replies)
Discussion started by: sushantnirwan
8 Replies

7. UNIX for Advanced & Expert Users

STDOUT redirect to a FILE, when fuser command is used !!

Hi all, I have the following script: ------------------------------------------------- #SCRIPT TO CHECK WHO HAS ACCESSED THE LOG/FILE IN PAST 'N' MINUTES, AND MAIL ACCORDINGLY. MYPATH="/clocal/mqbrkrs/user/mqsiadm/sanjay/" MAIL_RECIPIENTS="vg517@dcx.com" Subject="File accessed in last... (6 Replies)
Discussion started by: varungupta
6 Replies

8. UNIX for Dummies Questions & Answers

stdout back to tty

Hi everyone! Well, this is the thing.. I sent a process's stdout to /dev/null. This process is very time consuming and after a week it keeps running, what I need is to switch the stdout back to screen to see what's going on. Anyone know if it's possible and how to do it? Thanks and... (3 Replies)
Discussion started by: piltrafa
3 Replies

9. UNIX for Advanced & Expert Users

problem with redirect stdout to file

Hi all hope you can help as I am going MAD!!! :eek: The below is in a shell script but the redirection in the sed line does not work and outputs to the screen and the $fname_2 does note get created ????? Can any one help ?? #!/bin/ksh cd /app/ for fname in `ls -1 X*` do sed 1d $fname... (3 Replies)
Discussion started by: mlucas
3 Replies

10. Shell Programming and Scripting

Redirect stdout and stderr

How can I redirect and append stdout and stderr to a file when using cron? Here is my crontab file: */5 * * * * /dir/php /dir/process_fns.php >>& /dir/dump.txt Cron gives me an 'unexpected character found in line' when trying to add my crontab file. Regards, Zach Curtis POPULUS (8 Replies)
Discussion started by: zcurtis
8 Replies
Login or Register to Ask a Question