在Linux下,我有兩個文件路徑A和B:確定兩個文件路徑是否指向Linux/C下的同一文件?
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
會返回任何情況下,假?
是否有任何情況下,A和B是不同的文件,但IsSameFile
將返回true?
有沒有更好的方法來做我想做的事情?
你可以有多個引用同一個文件的文件描述符,是的。 – teppic 2013-03-27 02:12:31
@teppic:是的,你也可以有多個引用不同文件的文件描述符。我的問題是如何確定我所處的(或將要處於哪個)這兩個宇宙中的哪一個 – 2013-03-27 02:17:18
如果你確實打開了文件描述符,那麼你可以直接在它們上使用'fstat' - 如果inode和設備號相等,這兩個路徑不可能引用不同的文件。 – teppic 2013-03-27 02:41:57