On 30/08/18 10:15, Henry Vermaak wrote:
On Thu, Aug 30, 2018 at 09:45:00AM +0000, Mark Morgan Lloyd wrote:> On 30/08/18 09:00, Henry Vermaak wrote:> >On Thu, Aug 30, 2018 at
07:52:54AM +0200, Martin Schreiber wrote:> > >In order to flush textfiles automatically I use> ">
ttextrec(<thefile>).flushfunc:= ttextrec(<thefile>).inoutfunc;> "> after it is opened.> > >Reading text.inc this morning
lead me to believe this is the correctway. This is what the RTL does when opening serial devices inFileOpenFunc(), for example. There's a comment
inside Flush() that saysthat InOutFunc() should be used to flush, since the FlushFunc() may notbe assigned.> > I've just checked this and
unfortunately it doesn't do very much for the> standard device (?) used by WriteLn() etc., i.e. as would be used for a> quick-and-dirty program.
It definitely works for me. I made a program flush.pas that looks like this:
begin ttextrec(output).flushfunc := ttextrec(output).inoutfunc;
writeln('hi there'); sleep(1000);end.
Running `./flush > out.txt` and `tail -F out.txt` shows the outputimmediately,
while removing the flushfunc assignment causes a delay of asecond before the
output appeared in the file.
Ah yes, that's it, thanks very much.
WriteLn(StdErr, Format('# Socket %s, clock resolution %8.6f
uSec', [socketName, ts.tv_nsec / 1000]));
ttextrec(StdErr).flushfunc:= ttextrec(StdErr).inoutfunc;
while true do begin
ttextrec(Output).flushfunc:= ttextrec(Output).inoutfunc;
i := fprecv(client, @buff, 1024, 0);
Basically, I was getting confused by the lack of "Error" etc., hence the
different names.
I note this works the same for both tail -f and tail -F which have
slightly different ways of looking to see if the input file has changed.
--
Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk
[Opinions above are the author's, not those of his employers or colleagues]
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal