前提・実現したいこと
C言語を用いて、Linux(RaspberryPI)に既についているUSBメモリの認識場所(/dev/sda1)を得たいのですが方法が分かりません。
発生している問題
USBメモリのデバイスモード(/dev/bus/usb/002/002)は得られるのですが、認識場所(/dev/sda1)が得られません。
該当のソースコード
C
1#include <libudev.h> 2#include <stdio.h> 3#include <stdlib.h> 4 5/* メイン関数 */ 6int main(void) { 7 struct udev *udev; 8 struct udev_enumerate *enumerate; 9 struct udev_list_entry *devices; 10 11 udev = udev_new(); 12 if (!udev) { 13 printf("Can't create udev\n"); 14 exit(1); 15 } 16 17 // 現時点でどのデバイスにプラグインしているか? 18 enumerate = udev_enumerate_new(udev); 19 udev_enumerate_add_match_subsystem(enumerate, "scsi"); 20 udev_enumerate_add_match_property(enumerate, "DEVTYPE", "scsi_device"); 21 udev_enumerate_scan_devices(enumerate); 22 23 devices = udev_enumerate_get_list_entry(enumerate); 24 struct udev_list_entry *entry; 25 26 // インストールされているものを列挙する 27 udev_list_entry_foreach(entry, devices) { 28 const char *path = udev_list_entry_get_name(entry); 29 struct udev_device *scsi = udev_device_new_from_syspath(udev, path); 30 struct udev_device *usb = udev_device_get_parent_with_subsystem_devtype(scsi, "usb", "usb_device"); 31 const char *node; 32 if (usb) { 33 node = udev_device_get_devnode(usb); 34 printf("usb = %s:%s:%s, scsi = %s / devnode = :%s:%s\n", 35 udev_device_get_sysattr_value(usb, "idVendor"), 36 udev_device_get_sysattr_value(usb, "idProduct"), 37 node, 38 udev_device_get_sysattr_value(scsi, "vendor"), 39 udev_device_get_devnode(usb), 40 udev_device_get_devnode(scsi) 41 ); 42 } 43 udev_device_unref(scsi); 44 } 45 udev_enumerate_unref(enumerate); 46} 47
出力結果
usb = 0411:023a:/dev/bus/usb/002/002, scsi = BUFFALO / devnode = :/dev/bus/usb/002/002:(null)
試したこと
udev_device_get_devnodeやudev_device_get_sysattr_valueのパラメータを色々と変えたのですが、ダメでした。
どなた様か、ご教示いただけましたら幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/07 12:48
2019/03/07 21:29