[fpc-pascal]Using Tprocess to write to child process standard input.
Vincent Snijders
VSDS at RND.VB.CBS.NL
Tue Mar 9 14:36:52 CET 2004
Hi,
I am having some problems writing to the InputStream of a Tprocess
object. Below is the source code. I am testing this on windows. When
stepping through the code I get INVALID_HANDLE as return value of the
FileWrite in THandleStream.Write.
I think there is a bug somewhere in the Tprocess code for win32, but
before digging deeper I would like to know if anybody has succesfully
used Tprocess like this on win32 platform.
Regards,
Vincent.
The following procedure is from the parent application.
procedure DoIt;
var
LogProcess: TProcess;
procedure WriteLine(const s: string);
var
buffer: string;
begin
buffer := s + LineEnding;
LogProcess.Input.Write(buffer, Length(buffer));
end;
begin
LogProcess := TProcess.Create(nil);
LogProcess.Options := [poUsePipes];
LogProcess.CommandLine := 'logger.exe';
LogProcess.Execute;
WriteLine('test');
WriteLine('q');
LogProcess.WaitOnExit;
end;
The logger application is simply reads line from stdin and writes temp
to a file, until the line 'q' is received. The source is this:
program logger;
{$mode objfpc}{$H+}
uses
Classes;
var
logfile: text;
line: string;
procedure init;
begin
assignfile(logfile, 'd:\troep\log.txt');
rewrite(logfile);
writeln(logfile, 'Started logging');
closefile(logfile);
end;
procedure AppendText(line: string);
begin
append(logfile);
writeln(logfile, line);
closefile(logfile);
end;
begin
repeat
readln(line);
appendText(line);
until line='q';
end.
More information about the fpc-pascal
mailing list