一撇一捺 发表于 2018-5-12 21:27:09

嵌入式Linux+Qt U盘操作popen(fdisk -l)函数问题

本帖最后由 一撇一捺 于 2018-5-17 16:05 编辑

在嵌入式开发板上(Linux+qt),如今想要实现这一一功能,插入U盘能及时自动检测到并能读取U盘内文件的数据进行下一步的操作。由于对USB hotpliug不了解,所以我用了最笨的方法利用一定时器和信号槽定时周期检查/dev/sda1设备节点的存在与否来判断有没有U盘插入,部分代码如下:                sprintf(temp,"fdisk -l");
                stream = popen(temp, "r"); //通过popen执行命令fdisk -l 通过管道读取(“r”参数)到FILE* stream

                while(fgets(buf, sizeof(buf), stream)!=NULL)   //将流文件内容获取到buf内
                {
                        if(!strncmp(buf,"/dev",4))
                        {   
                              sscanf(buf,"/dev/sd%c%d:",&stt,&usb_index);

                              memset(temp,0,sizeof(temp));
                              sprintf(temp,"sd%c",stt);
                              
                              if(stt=='a')//index==1)
                              {
                                        usb=stt;
                                        break;
                              }
                              index++;
                        
                        }
                }

                .......
            红色代码居然返回了空,蓝色代码buf里面获取到的内容也是空了,但我手动在命令行下执行fdisk -l时是很正常显示一些内容的,为什么这里利用popen函数就执行不了呢?不知道各位遇到过这种情况没有,或者有更好的办法来达到同样的功能(自动识别出U盘)?希望能得到大家的指教,谢谢!

一撇一捺 发表于 2018-5-17 16:04:20

后期经过改善,程序能正常读到U盘,目前检测并读取U盘的方法我能找到的大概三种,其一,读取对应路径有没有生成相应的文件判断,如/system/class/block/sda等等;其二利用netlink方式,这是一种特殊的socket,当U盘热插拔时,内核会发送消息给HAL层,通过接收目标消息来判断;其三,开源项目libusb。第一种最简单且不耗时,第二种耗时性比第一种差,第三种没试过。
页: [1]
查看完整版本: 嵌入式Linux+Qt U盘操作popen(fdisk -l)函数问题