Pod Linuksem, mam dwie ścieżki plików A i B:Ustalenie, czy dwie ścieżki do pliku wskazują na ten sam plik w systemie Linux/C?
const char* A = ...;
const char* B = ...;
Teraz chcę, aby określić, powinienem je zarówno open(2)
...
int fda = open(A, ...);
int fdb = open(B, ...);
... dostanę dwa uchwytów plików otworzyć na ten sam plik w systemie plików?
Aby to ustalić, myślałem stat(2)
:
struct stat
{
dev_t st_dev;
ino_t st_ino;
...
}
Coś (pseudo-kod):
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;
}
Czy istnieją przypadki, gdzie A i B są takie same, ale plik IsSameFile
wróci fałszywy?
Czy są przypadki, w których A i B to różne pliki, ale IsSameFile
zwróci wartość true?
Czy istnieje lepszy sposób robienia tego, co próbuję zrobić?
Możesz mieć wiele deskryptorów plików, które odnoszą się do tego samego pliku, tak. – teppic
@teppic: Tak, możesz także mieć wiele deskryptorów plików, które odnoszą się do różnych plików. Moje pytanie brzmi: jak określić, który z tych dwóch wszechświatów, w których się znajduję (lub które będą w nim być) –
Jeśli masz otwarte deskryptory plików, możesz po prostu użyć 'fstat' bezpośrednio na nich - jeśli i-węzły i numery urządzeń są równe , nie jest możliwe, aby dwie ścieżki odnosiły się do różnych plików. – teppic