I have a parent process which forks out a child to perform execv().
I need the output given by execv() to stdout to be displayed onscreen as also copied to a log fil
If you don't want to use a tee, before you write the data, write it to a file, then send it to stdout.
You should write a logging function that does this for you to make it cleaner.
Also, you can use fifo's. mkfifo my.fifo; in execv: program > my.fifo; and open fifo as a regular file, reading from it. This way you can have your stdout parsed, but it has minor drawbacks with shared access.
Do you want only the output of the child to go to the log?
The tee unix command does exactly what you describe: you pipe in data and it writes to a log and to stdout.
Pipe it through tee.
Use Tee like this:
./myprog | tee outputfile
You can use dup2()
- this link provides an example