Linux/C下判断两个文件路径是否指向同一个文件?

2024-04-08

在Linux下,我有两个文件路径A和B:

const char* A = ...;
const char* B = ...;

我现在想确定,我是否应该open(2)他们俩...

int fda = open(A, ...);
int fdb = open(B, ...);

...我会在文件系统中打开同一个文件的两个文件句柄吗?

为了确定这一点,我想到了stat(2):

struct stat
{
    dev_t st_dev;
    ino_t st_ino;
    ...
}

类似于(伪代码):

bool IsSameFile(const char* sA, const char* sB)
{
    stat A = stat(sA);
    stat B = stat(sB);

    return A.st_dev == B.st_dev && A.st_ino == B.st_ino;
}

是否存在 A 和 B 是同一个文件但IsSameFile会返回 false 吗?

是否存在 A 和 B 是不同文件但IsSameFile会返回 true 吗?

有更好的方法来做我想做的事情吗?


您的程序在所有情况下都会正常工作,因为A.st_ino将返回索引节点号系统中的文件。由于索引节点号是唯一的,您的程序将正确识别打开的两个文件是否相同。

您还可以检查的值A.st_mode查明该文件是否是符号链接.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux/C下判断两个文件路径是否指向同一个文件? 的相关文章

随机推荐