在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?
有没有更好的方法来完成我想做的事情?
fstat
- 如果i节点和设备号相等,则这两个路径不可能引用不同的文件。 - teppic