Motivi di sicurezza:per accedere a un file è necessaria l'autorizzazione sul file NONCHÉ l'autorizzazione per cercare in tutte le directory dalla radice necessaria per accedere al file. Se potessi accedere a un file tramite inode, potresti ignorare i controlli sulle directory che lo contengono.
Ciò consente di creare un file a cui può accedere un insieme di utenti (o un insieme di gruppi) e non chiunque altro:creare directory accessibili solo agli utenti (una directory per utente) e quindi hard- collega il file a tutte quelle directory:il file stesso è accessibile a chiunque, ma in realtà è accessibile solo a qualcuno che ha i permessi di ricerca su una delle directory a cui è collegato.
Alcuni sistemi operativi lo fanno avere quella struttura. Ad esempio, OS X ne ha bisogno per supportare Carbon File Manager e su Linux puoi usare debugfs
. Naturalmente, puoi farlo su qualsiasi UNIX dalla riga di comando tramite find -inum
, ma il vero motivo per cui non puoi accedere ai file tramite inode è che non è particolarmente utile. Sì in un certo senso aggira i permessi dei file, perché se c'è un file che puoi leggere in una cartella che non puoi leggere o eseguire, l'apertura dell'inode ti permette di scoprirlo.
Il motivo per cui non è molto utile è che devi trovare un numero di inode tramite un *stat()
call, a quel punto hai già ha il nome del file (o un fd aperto)... oppure devi indovinare l'inum.
In risposta al tuo commento:per "passare un file", puoi usare fd che passa sui socket AF_LOCAL tramite SCM_RIGHTS
(vedi man 7 unix
).