Wednesday, April 11, 2012

fprintf not writing to the pipe

I am successfully opening the pipe i.e gnuplot window using _popen. But not able to write to the stream using fprintf. I have checked the file pointer value and it is not null. I searched many sources and used fflush and it is not working. I could not find a solution.



Actually I have asked a similar question before here gnuplot c++ interface through pipes -cannot open wgnuplot reposting with some modifications.



Any suggestions would be helpful..



FILE* gp;
string command = "set style data lines\n" ;
char *path = "\"C:\\Program Files\\gnuplot\\bin\\wgnuplot\" -persist";

gp = _popen(path , "wt");

if (gp == NULL)
return -1;

fprintf(gp,command );
fflush(gp);
_pclose(gp);


I used this code without using pipes and it uses createprocess. Here also the same situation,The gnuplot.exe opens but with no output plot.



int _tmain (int argc, LPTSTR argv [])

{
DWORD i;
HANDLE hReadPipe, hWritePipe;

SECURITY_ATTRIBUTES PipeSA = {sizeof (SECURITY_ATTRIBUTES), NULL, TRUE};
/* Init for inheritable handles. */
TCHAR outBuf[ ] = TEXT("a=2; plot sin(a*x)/x; pause mouse; plot exp(-a*x); pause mouse") ;
TCHAR inBuf[80];
DWORD dwWritten, dwRead ;
BOOL bSuccess = FALSE;
PROCESS_INFORMATION ProcInfo2;
STARTUPINFO StartInfoCh2;


/* Startup info for the Gnuplot process. */

GetStartupInfo (&StartInfoCh2);

/* Create an anonymous pipe with default size.
The handles are inheritable. */

bSuccess = CreatePipe (&hReadPipe, &hWritePipe, &PipeSA, 0);
if (bSuccess == TRUE) printf("pipe created\n");

WriteFile(hWritePipe, outBuf, sizeof(outBuf), &dwWritten, NULL) ;
printf("Wrote %d bytes to Gnuplot\n", dwWritten) ;

CloseHandle (hWritePipe);

/* Repeat (symmetrically) for the child process. */

StartInfoCh2.hStdInput = hReadPipe;
StartInfoCh2.hStdError = GetStdHandle (STD_ERROR_HANDLE);
StartInfoCh2.hStdOutput = GetStdHandle (STD_OUTPUT_HANDLE);
StartInfoCh2.dwFlags = STARTF_USESTDHANDLES;
bSuccess = FALSE ;
bSuccess = CreateProcess ("C:\\Program Files\\gnuplot\\bin\\wgnuplot.exe", NULL, NULL, NULL,
TRUE,0, NULL, NULL, &StartInfoCh2, &ProcInfo2);
if (bSuccess == TRUE)
printf("Created Gnuplot Process\n" ) ;

WaitForSingleObject (ProcInfo2.hProcess, INFINITE);
CloseHandle (ProcInfo2.hThread);
CloseHandle (hReadPipe);

/* Wait for Gnuplot process to complete.*/

CloseHandle (ProcInfo2.hProcess);
return 0;
}




No comments:

Post a Comment