2009-03-02 6 views
5

Attualmente sto cercando di ottenere un inode per un dato pathname in una funzione del kernel. Tutto quello che ho a disposizione è il percorso completo. Ho provato i tentativi come:Ottenere inode dal percorso in Linux Kernel

user_path_at(AT_FDCWD, buffer, LOOKUP_FOLLOW, &path); 

Ma la dentatura in quel percorso dato non è valida, sembra risultare. Poi ho pensato di provare a stat() e ottenere il numero di inode da quello. Tuttavia, questo mi dà solo un numero, non un inode di struct. Non conosco un modo per convertire un numero di inode in un inode senza prendere un inode esistente e attraversare l'intero elenco di inode. E non so nemmeno se funzionerebbe. Ma certamente non voglio farlo.

C'è un modo semplice per ottenere un inode di struct da un percorso di char * nel kernel?

risposta

0

Non esiste un modo semplice dato che struct inode è parte del kernel e si è nello spazio utente. Tutto dipende dalla particolare implementazione del filesystem. Sei sicuro che le informazioni nella struttura delle statistiche non siano sufficienti per le tue esigenze?

In ogni caso, this link potrebbe aiutare.

+1

Mi ha appena colpito (dopo circa 3 ore) che stat() sarà sufficiente per le mie esigenze, poiché ho solo bisogno delle informazioni. Sono diventato così deciso a ottenere l'inode che ho parzialmente perso la vista del mio obiettivo. E lo sto facendo all'interno del kernel. Quindi, eseguire stat() non è in realtà ottimale, ma lo farà. –

+0

Il collegamento è morto. Ecco perché le risposte solo per link sono cattive. – MSalters

2

stat() ti darà l'inode di un file nel campo "st_ino".

Scusa, incomprensione iniziale della domanda.

Se si desidera la reale struttura di inode all'interno del kernel, sono abbastanza sicuro che il kernel stesso non varrebbe una matrice o un elenco alla ricerca del numero di inode (a meno che l'elenco non sia molto piccolo). Poiché il codice del kernel è pubblicamente disponibile, dovresti essere in grado di scoprire come lo fa, quindi fare lo stesso.

+0

L'ho già notato nel mio post. Tuttavia, questo mi dà solo il numero di inode, non l'inode della struct necessario per ottenere le informazioni sul file. –