The file(s) are used by more than one app, so they'll always be present. The 'writing' app incidentally is a sizable C++ project over which I have full control, so I can play around with it.

I did try messaging but it was actually very slow, not sure why. I think it's because the writer is already messaging a server (using a custom protocol) and sending a lot of data. I wrote a client to tap into that protocol but it was very sluggish and occasionally stopped completely.

I did get one thing working at full speed, not an arbitration service as such but just a nutty idea I had earlier;

(a) Writer overwrites FileA and then appends lines of data to FileA
(b) When writer has written 10k lines, it writes a SWOP line to FileA.
(c) Writer then resets count
(d) Writer overwrites FileB and then appends lines of data to FileB

In parallel,

(a) Reader reads from FileA (it's ok if the file happens to be empty)
(b) If Reader encounters a SWOP instruction, it checks FileB exists (if not it waits)
(c) Reader starts reading from FileB

This then swops back from FileB to FileA after 10k lines.

This works quite well because the Read interval is faster than the Write interval, the files never exceed 10k lines of data.

I'll make something better tomorrow...