Dear Rooters,
in my GUI, I would like to capture the Root messages and print them into
a "read-only" editor-type widget.
I tried to adapt:
http://root.cern.ch/lxr/source/proof/src/TProofServ.cxx#813
to my case so, I wrote the following subroutine:
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
void MainWindow::RootDialog()
{
char *logfile;
char string[80];
FILE *fLogFile;
logfile ="RootLogFile";
gROOT->ProcessLine(".! rm -f RootLogFile"); // delete old
RootLogFile
if ((fLogFile=freopen(logfile, "w", stdout)) == 0) // redirect
stdout in logfile (???)
printf("could not redirect stdout");
if ((dup2(fileno(stdout), fileno(stderr))) < 0) // stdout and stderr
redirected to the same file.
printf("could not redirect stderr");
fprintf(fLogFile,"\n"); // add a new line at the end of the file
fclose(fLogFile);
if ((fLogFile = fopen(logfile, "r")) == 0) // open the newly created
file
printf("could not open logfile");
else
{
fgets(string,80,fLogFile); // get the 1st line
while (!feof(fLogFile)) // test if EOF
{
RootSays->append(string); // write the line in my QTwidget
fgets(string,80,fLogFile); // read the next line
}
fclose(fLogFile);
}
}
I've got 2 problems that I haven't been able to solve:
1 - whatever I try, I don't get stdout written in my file and thus it is
not printed in my widget.
However, I have nothing also on the window where stdout would have been
printed if stdout
was not redirected... it just seems to be lost somewhere. But Where ???
2 - I've got a copy of stderr in logfile but nothing in my widget.
I tested the widget with a file that I created "by hand", no problem.
Thanks for your help.
Fred
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:46 MET