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

前端之家收集整理的这篇文章主要介绍了确定两个文件路径是否指向Linux/C下的同一文件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

我现在想确定,我应该打开(2)他们两个……

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

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

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

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

像(伪代码)的东西:

@H_301_5@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的值以确定该文件是否为符号链接.

猜你在找的Linux相关文章