obtenir les indicateurs de périphérique par nom d’appareil

J’espère que vous pouvez m’aider: j’essaie de déterminer si le périphérique est amovible ou non, tout ce que j’ai est le nom du périphérique (/ dev / sdc). En fait, je dois déterminer quand le fichier sur un support amovible ou sur un disque local par chemin complet de ce fichier.

J’ai essayé de chercher dans le – > fs-> pwd et tout ce que je pourrais trouver est un ensemble de drapeaux ici: * current-> fs-> pwd.mnt-> mnt_sb-> s_bdev-> bd_disk-> flags * où GENHD_FL_REMOVABLE défini pour les périphériques amovibles

Mais je reçois toujours les mêmes indicateurs (si je comprends bien, s_bdev pointe toujours vers le même périphérique (/ dev / sda)).

Alors maintenant, j’obtiens le nom de périphérique (/ dev / sdc) qui contient mon fichier en analysant mtab, mais je ne peux toujours pas le trouver, le supprimer ou non.

Est-il possible d’obtenir la structure block_device par nom de périphérique? (par exemple, la structure “file” peut être obtenue en appelant fd = open (“name”) fl = fged (fd) où fl pointe vers la structure “file”)

Vous pouvez effectuer une itération sur des périphériques en class_dev_iter_init bloc en utilisant class_dev_iter_init et class_dev_iter_next . Voir le code dans le block/genhd.c blk_lookup_devt pour l’utilisation.

Une fois que vous avez le périphérique, vous pouvez utiliser dev_to_disk pour obtenir un struct gendisk * , dans lequel vous pouvez vérifier le drapeau amovible.

Lisez / sys / block / dev-name / amovible car il doit contenir 1 si le périphérique est amovible ou 0 sinon. (dev-name = le nom de l’appareil: sda, hda, fd0, …)