确定两个文件路径是否指向Linux/C下的同一文件?

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

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

我现在想确定,我应该打开(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将返回系统中文件的inode编号.由于inode编号是唯一的,因此您的程序将正确识别打开的两个文件是否相同.

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

相关文章

文章浏览阅读1.8k次,点赞63次,收藏54次。Linux下的目录权限...
文章浏览阅读1.6k次,点赞44次,收藏38次。关于Qt的安装、Wi...
本文介绍了使用shell脚本编写一个 Hello
文章浏览阅读1.5k次,点赞37次,收藏43次。【Linux】初识Lin...
文章浏览阅读3k次,点赞34次,收藏156次。Linux超详细笔记,...
文章浏览阅读6.8k次,点赞109次,收藏114次。【Linux】 Open...