linux 下获取U盘路径

本文介绍了如何使用Linuxshell脚本中的`cat/proc/mounts|cut-d-f2|grepmedia`命令获取USB设备挂载在media目录下的路径,并通过`redirect_system`函数将结果重定向至临时文件。`GetDownload_USB_path`函数负责处理这些操作并返回U盘路径。
摘要由CSDN通过智能技术生成

linux会将usb设备挂载在media下,逻辑就是先查看所有挂载,将挂载里面含有media的路径保存到一个文件里,再去文件里读取u盘路径

查找对应的shell 指令为 : cat /proc/mounts | cut -d  ' ' -f 2 | grep \"media\"

该指令为先查找 所有挂载.然后将查找的第二个字段截取出来,再在里面筛选 media字段

然后将查找到的u盘路径 写到某个文件里

全部函数如下:

QString setplay::GetDownload_USB_path()
{
        QString usb_path,tmp;
        redirect_system("cat /proc/mounts | cut -d  ' ' -f 2 | grep \"media\"","/root/tmp_usb_name");
  
        QFile file("/root/tmp_usb_name");                        //---打开文件
        if (file.open(QIODevice :: ReadWrite))   //  以只读的方式打开
        {
                char cBuf[128];
                qint64 LineLen = file.readLine(cBuf, sizeof(cBuf)); //---读取文本文件的一行
                if (-1 != LineLen)                          //---读取成功,将返回读取的字节,读取失败,将返回-1
                {
                        qDebug() << cBuf;                 //--输出读取的文本文件内容
                        usb_path =  QString(cBuf);
                        int length=usb_path.length();
                        tmp = usb_path.left(length-1);//实际读出来的U盘名称总是多一个空格在右边。
                        QString qinfo;
                        qinfo=QString("tmp=%1,usb_path=%2").arg(tmp).arg(usb_path);
                        LOGGER->Log(LOGGER_INFO,"%s",qinfo.toLatin1().data());
                }
        }
        file.flush();
        file.close();
        system("sudo rm -rf /root/tmp_usb_name");

        return tmp;
}
#define CMD_STR_LEN 1024 
int redirect_system(char* cmdstring, char* tmpfile)
 {
         char cmd_string[CMD_STR_LEN];
         sprintf(cmd_string, "%s > %s", cmdstring, tmpfile);
         return system(cmd_string);
 }

第一个函数返回u盘的路径,第二个函数将查出来的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、付费专栏及课程。

余额充值