Testing if two open descriptors refer to the same inode

From: Florian Weimer
Date: Mon Jul 29 2024 - 02:55:59 EST


It was pointed out to me that inode numbers on Linux are no longer
expected to be unique per file system, even for local file systems.
Applications sometimes need to check if two (open) files are the same.
For example, a program may want to use a temporary file if is invoked
with input and output files referring to the same file.

How can we check for this? The POSIX way is to compare st_ino and
st_dev in stat output, but if inode numbers are not unique, that will
result in files falsely being reported as identical. It's harmless in
the temporary file case, but it in other scenarios, it may result in
data loss.

Thanks,
Florian