2011-10-02 10 views
6

spero che tu possa aiutarmi: Sto provando a determinare se il dispositivo è rimovibile o meno, tutto quello che ho è il nome del dispositivo (/ dev/sdc). In realtà, ho bisogno di determinare quando il file su supporto rimovibile o su disco locale per il percorso completo di questo file.get device flag per nome dispositivo

Ho provato a cercare nel current-> fs-> pwd e tutto quello che ho potuto trovare è un insieme di bandiere qui: * current-> fs-> pwd.mnt-> mnt_sb- > s_bdev-> bd_disk-> bandiere * dove insieme GENHD_FL_REMOVABLE per i dispositivi rimovibili

ma ottengo sempre gli stessi flag impostati (se ho capito, s_bdev punta sempre allo stesso dispositivo (/ dev/sda)).

Così ora ho il nome del dispositivo (/ dev/sdc) che contiene il mio file analizzando mtab, ma non riesco ancora a scoprirlo, rimuovendolo o meno.

C'è un modo per ottenere la struttura block_device in base al nome del dispositivo? (per esempio, "file" struttura possono essere ottenuti chiamando fd = open ("nome") fl = fged (fd) in cui i punti fl a "file" struttura)

risposta

1

È possibile scorrere su dispositivi a blocchi utilizzando class_dev_iter_init e class_dev_iter_next. Vedere il codice in block/genhd.cblk_lookup_devt per l'uso.

Una volta ottenuto il dispositivo, è possibile utilizzare dev_to_disk per ottenere un struct gendisk *, in cui è possibile controllare il flag rimovibile.

+0

Grazie, sembra che risolva il mio problema – Makc

+0

Quindi, usando in questo modo, come posso determinare quale dei dispositivi a blocchi contiene il mio file aperto se ho solo percorso completo per questo file. – Makc

+1

@Makc: Penso che tu possa usare 'vfs_stat', ti darà' struct kstat' in cui potrai confrontare 'dev_t' con il dispositivo a blocchi. – Hasturkun

1

lettura/sys/block/dev-name/removibile come dovrebbe contenere 1 se il dispositivo è rimovibile o 0 se non lo è. (dev-name = il nome del dispositivo: sda, hda, fd0, ...)

+0

lo so, ma non funziona con le vecchie versioni di Linux, comunque, grazie. – Makc

+0

Inoltre, non conosco alcun modo sicuro per leggere i file dai moduli del kernel. (Ho provato sys_read() e vfs_read() - causa "Oops" :)) Forse conosci qualche modo per accedere a sysfs dal modulo del kernel? – Makc