Linux获取U盘名

10 篇文章 0 订阅
static string getDiskName()
{
DIR *dirptr = NULL;
struct dirent *entry = NULL;
string diskName("");
char *path = "/media/root/";
if ((dirptr = opendir(path)) == NULL){/* 未插入U盘,返回空字符串 */
printf("<HalModule::handleBkSystemParamImport> open /media/root/ failed!\n");
return diskName;
}
else{
while (entry = readdir(dirptr)){
printf("%s\n", entry->d_name);/* 打印出该目录下的所有内容 */
if (strcmp(".", entry->d_name) != 0 && strcmp("..", entry->d_name) != 0){
diskName = string(entry->d_name);
}
}
}
return diskName;
}
Linux读取U盘或者移动硬盘序列号并获取U盘或者移动硬盘分区。基本原理如下: 当有外置 USB 插入的时候,会产生 /proc/scsi/usb-storage 目录,并在其中产生数字文件(形如 1 2 3 4),此文件存储了设备相关信息。 相应的 /sys/class/scsi_device/ 目录中会有 scsi 设备的目录(ide 硬盘默认无子目录,sata硬盘默认有子目录),以数字开头(形如 1:0:0:0 2:0:0:0) 这个数字与前面 /proc/scsi/usb-storage目录中的相对应,子目录表示sata硬盘。比如 /sys/class/scsi_device/2:0:0:0/device/block 中有USB设备,从该目录下得到U盘或者移动硬盘的分区,比如sda1。 该demo实现了上述过程,先检查 /proc/scsi/usb-storage 目录,看是否有u盘或者移动硬盘接入,如果有则读取u盘或者移动硬盘的序列号,然后在/sys/class/scsi_device/目录下逐级查找,直到找到u盘或者移动硬盘的分区。 完整代码,可直接编译和测试,嵌入式环境下也是适应的。 在linux测试如下,id表示序列号,sdb1表示是分区名称: # ./a.out udisk dev num:0 udisk id:055CE21B ret:0 dev num:0 found dir:0:0:0:1 found dev dir:0:0:0:1,full path:/sys/class/scsi_device/0:0:0:1 sub founction found dir:sda found sd device dir:sda,full path:/sys/class/scsi_device/0:0:0:1/device/block/sda found dir:0:0:0:2 found dev dir:0:0:0:2,full path:/sys/class/scsi_device/0:0:0:2 sub founction found dir:sdb found sd device dir:sdb,full path:/sys/class/scsi_device/0:0:0:2/device/block/sdb found sd sub device dir:sdb1 found dir:0:0:0:0 found dev dir:0:0:0:0,full path:/sys/class/scsi_device/0:0:0:0 sub funciton Open Directory /sys/class/scsi_device/0:0:0:0/device/block Error:No such file or directory get name return:0,disk name:sdb1 # 因为有的USB设备会有好几个,比如把CD和U盘集成到一起,就会出现上面的情况,有多个子目录去查找。
Linux系统中,U盘通常被识别为可移动存储设备,并被挂载到文件系统的某个目录下。通常,U盘在插入后会被自动挂载到`/media`目录或`/run/media`目录下,其挂载点通常是按照用户来命的。例如,如果U盘被识别为`Kingston`,并且当前登录用户是`user`,那么U盘可能会被挂载到`/media/user/Kingston`。 要通过C语言获取U盘的路径,你可以采用以下步骤: 1. 使用`blkid`命令获取U盘的信息,然后解析出设备名称。 2. 利用`mount`命令输出的挂载信息来确定U盘的挂载点。 3. 结合第一步获取的设备名称和第二步确定的挂载点,构建U盘的完整路径。 以下是一个简单的C语言程序示例,用于获取U盘路径: ```c #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <mntent.h> int main() { FILE *mnt; struct mntent *mount_entry; char device_name[256] = {0}; char mount_point[256] = {0}; // 打开当前系统的挂载信息 mnt = setmntent("/etc/mtab", "r"); if (mnt == NULL) { perror("setmntent"); return 1; } // 遍历挂载信息 while ((mount_entry = getmntent(mnt)) != NULL) { // 查找文件系统类型为vfat或ntfs的挂载点,通常U盘使用这两种类型 if (strcmp(mount_entry->mnt_type, "vfat") == 0 || strcmp(mount_entry->mnt_type, "ntfs") == 0) { strncpy(mount_point, mount_entry->mnt_dir, sizeof(mount_point)); strncpy(device_name, mount_entry->mnt_fsname, sizeof(device_name)); break; } } endmntent(mnt); // 输出U盘路径 if (mount_point[0] != '\0' && device_name[0] != '\0') { printf("U盘挂载点:%s\n", mount_point); printf("U盘设备名称:%s\n", device_name); } else { printf("没有找到U盘。\n"); } return 0; } ``` 这段代码会输出当前挂载的U盘的挂载点和设备名称。需要注意的是,这个程序假设U盘使用了`vfat`或`ntfs`文件系统类型,这在许多情况下是合理的,但并非所有U盘都是这样的文件系统类型。此外,挂载点的路径可能因为系统的不同而有所不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值