我将使用一个C程序来扫描用户指定的文件和目录树。为了加快该过程,我想利用线程进行并行读取,但是读取同一物理设备上的两个设备可能会大大减慢两个读取的速度。我需要能够判断一对文件是否在同一物理设备上,而不是同一逻辑设备上。我还需要在不使用外部库或非C代码。
我知道我可以使用stat()
来找出两个文件是否共享一个逻辑设备,但是例如在两个文件上是否存在两个文件。 /dev/sda2
和/dev/sda5
并共享/dev/sda
,尽管stat()
会说它们位于不同的“设备”上,但我还是想告诉他们它们共享一个物理设备。理想情况下,我希望能够跨平台(Windows,Linux,macOS)运行,更理想的情况是,它也可以与md或lvm卷之类的东西一起使用。不幸的是,我想出的唯一方法很复杂。例如,在Linux上,由于完全不同的物理卷仍可以共享主要设备号,因此我认为我需要在程序中构建Linux特定的知识(解析sysfs?)。
我找到了答案Determine if two files belongs to the same volume,它不是重复的。这个问题在Windows上使用GetVolumeInformation
,这很有用,但是我不知道在Linux或macOS上有什么等效方法。
如果这不是实际操作,可以使用哪些替代方法?基准化文件读取性能并在读取速度下降时更改行为?