Sotto Linux, ho due percorsi di file A e B:Determinare se due percorsi di file puntano allo stesso file sotto Linux/C?
const char* A = ...;
const char* B = ...;
Ora voglio stabilire, dovrei entrambi open(2)
...
int fda = open(A, ...);
int fdb = open(B, ...);
... posso ottenere due filehandles aprire lo stesso file nel filesystem?
per determinare questo ho pensato di stat(2)
:
struct stat
{
dev_t st_dev;
ino_t st_ino;
...
}
Qualcosa di simile (pseudo-codice):
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;
}
Esistono casi in cui A e B sono gli stessi file, ma IsSameFile
avrebbero ritorno falso?
Esistono casi in cui A e B sono file diversi ma IsSameFile
restituisce true?
C'è un modo migliore per fare ciò che sto cercando di fare?
È possibile avere più descrittori di file che si riferiscono allo stesso file, sì. – teppic
@teppic: Sì, e puoi anche avere più descrittori di file che fanno riferimento a file diversi. La mia domanda è: come determinare quale di questi due universi sono in (o sarebbe in) –
Se i descrittori di file sono aperti, si può semplicemente usare 'fstat' direttamente su di essi - se gli inode e i numeri dei dispositivi sono uguali , è impossibile che i due percorsi facciano riferimento a file diversi. – teppic