Commands like diff
read files and directories by using a
series of system calls, as operating systems typically do not give a
program a way to snapshot all its input before processing it.
If input files change while being read, diff
and related
commands can generate output that does not correspond to any state of
the input file system.
For example, if some other process truncates a file to zero size when
diff
has read just half the file, diff
will use
the half that it read as its input data. As another example, if a
recursive diff
determines that a file is a directory, and
then some other process replaces the directory with a regular file,
and then diff
attempts to descend into the directory,
diff
will issue a diagnostic and fail.
In these situations the output of diff
and related programs
should be interpreted with some care.