简体   繁体   中英

get device flags by device name

hope you can help me: I'm trying to determine whether the device is removable or not, all i have is device name (/dev/sdc). Actually, I need to determine when the file on removable media or on local disk by full path of this file.

I've tryed to search in the current->fs->pwd and all I could find is a set of flags here: *current->fs->pwd.mnt->mnt_sb->s_bdev->bd_disk->flags* where GENHD_FL_REMOVABLE set for removable devices

But i always get the same flags set (as i understand, s_bdev always points to the same device (/dev/sda)).

So now i get the device name (/dev/sdc) that contains my file by parsing mtab, but still can't find out, removable it or not.

Is there possible way to get block_device structure by device name? (for example, "file" structure may be obtained by calling fd = open("name") fl = fged(fd) where fl points to "file" structure)

You can iterate over block devices using class_dev_iter_init and class_dev_iter_next . See the code in block/genhd.c blk_lookup_devt for usage.

Once you have the device, you can use dev_to_disk to get a struct gendisk * , in which you can check the removable flag.

Read /sys/block/dev-name/removable as it should contain 1 if the device is removable or 0 if not. (dev-name = the device's name: sda, hda, fd0, ...)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM