В 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
непосредственно на них - если индексы и номера устройств равны, два пути не могут ссылаться на разные файлы. - person teppic   schedule 27.03.2013