Question:
How do I determine if a Unix process has stopped writing to a file,
so that my Java program can start reading it?
Answer:
If you are not able to modify the source code for the Unix program,
you may well be out of luck. If you can modify the source code, then
you have a few options.
The most straightforward is to use
interprocess communication to notify the Java program that it is ready to
start reading the file. You can do this using a TCP socket, by
creating a named pipe that the Java program reads for notification, or by
just creating a temporary file to signal the go ahead.
Another alternative is to use mandatory file locking, if available, and make the
Unix process lock the file before writing and unlock it after it is
done. This is the best solution because it doesn't require any
modifications to your Java program. With mandatory locking, the Java
program will block if it tries to read the file while it is still
locked. If mandatory locking is not available to you, you can also
write some native code to enable cooperative file locking from your
Java program.