开发板上如何判断U盘被拔出

[复制链接]
查看11 | 回复4 | 2021-1-27 06:43:50 | 显示全部楼层 |阅读模式
RT
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:43:50 | 显示全部楼层
你使用的是什么操作系统?如果是linux,你可以使用fdisk-l来查看磁盘的分区,一般u盘被挂载在/dev/sda1上,有时也是在/dev/sdb1上,确定之后,就使用umount/dev/xxx(U盘所挂载的分区),这样就可以拔出,再用fdisk-l就不会有这个挂载分区了,,
回复

使用道具 举报

千问 | 2021-1-27 06:43:50 | 显示全部楼层
是要用程序实现的
回复

使用道具 举报

千问 | 2021-1-27 06:43:50 | 显示全部楼层
教给你一个愚蠢的办法
哈哈
charret[1024];
char*DoSysCmd(char*cmdline)
{
FILE*fp;
charline[32];
charcmdtmp[256];
memset(cmdtmp,0x00,sizeof(cmdtmp));echo_everyline("--");
sprintf(cmdtmp,"%s2>&1",cmdline);echo_everyline("--");
memset(ret,0x00,sizeof(ret));echo_everyline("--");
fp=popen(cmdtmp,"r");echo_everyline("--");
while(fgets(line,sizeof(line),fp))
{
sprintf(ret,"%s%s",ret,line);echo_everyline("--");
}
pclose(fp);echo_everyline("--");
returnret;
}
//把U盘上的数据导出到U盘
voidDataExporter(void)
{
char*result;
char*result_usb0;
char*result_umount;
char*result_mount;
char*result_check1;
char*result_check2;
char*result_check3;
if(1==GetDevCStatePlazaServerState())
{
show_Help("和服务器通讯正常,不允许导出数据......\n按【取消】键取消。");echo_everyline("--");
return;
}
show_Info("检查是否存在可移动存储设备......");echo_everyline("--");
result=DoSysCmd("cat/proc/scsi/scsi");echo_everyline("--");
if(0==strcmp(result,"Attacheddevices:none\n"))
{
show_Info("对不起,没有发现任何设备!");echo_everyline("--");
return;
}
result_usb0=DoSysCmd("cat/proc/scsi/usb-storage-0/0");echo_everyline("--");
if(NULL==strstr(result_usb0,"Attached:Yes"))
{
show_Info("对不起,设备未连接!");echo_everyline("--");
return;
}
show_Info("存在可移动存储设备,正在尝试挂载......");echo_everyline("--");
result_umount=DoSysCmd("umount"FILENAME_USBDIR);echo_everyline("--");
result_mount=DoSysCmd("mount-tvfat/dev/scsi/host0/bus0/target0/lun0/part1"FILENAME_USBDIR);echo_everyline("--");
if(NULL!=strstr(result_mount,"failed:"))
{
result_check1=DoSysCmd("mount");echo_everyline("--");
if(NULL!=strstr(result_check1,"/dev/scsi/host0/bus0/target0/lun0/part1on"FILENAME_USBDIR))
{
show_Info("对不起,未能挂载可移动存储设备!");echo_everyline("--");
return;
}
}
show_Info("成功挂载可移动存储设备,正在准备复制文件.....");echo_everyline("--");
result_check2=DoSysCmd("ls"FILENAME_USBDIR""FILENAME_ARCATUSB);echo_everyline("--");
if(NULL!=strstr(result_check2,"Nosuchfileordirectory"))
{
if(NULL!=strstr(DoSysCmd("mkdir"FILENAME_USBDIR""FILENAME_ARCATUSB),"mkdir:"))
{
show_Info("对不起,创建目录时遇到问题!");echo_everyline("--");
return;
}
}
result_check3=DoSysCmd("ls"FILENAME_USBDIR""FILENAME_ARCATUSB);echo_everyline("--");
if(strlen(result_check3)>1)
{
if(NULL!=strstr(result_check3,"Nosuchfileordirectory"))
{
show_Info("对不起,目录创建失败!");echo_everyline("--");
return;
}
else
{
show_Info("对不起,您可移动设备的目录【"FILENAME_ARCATUSB"】非空!");echo_everyline("--");
return;
}
}
show_Info("正在复制文件.....");echo_everyline("--");
if(NULL!=strstr(DoSysCmd("cp"FILENAME_SEND_MSG_BACKUP_FILE_Archive"*"FILENAME_USBDIR""FILENAME_ARCATUSB),"cp:"))
{
show_Info("对不起,复制文件时遇到问题!");echo_everyline("--");
return;
}
show_Info("正在清理文件.....");echo_everyline("--");
if(NULL!=strstr(DoSysCmd("rm"FILENAME_SEND_MSG_BACKUP_FILE_Archive"*"),"rm:"))
{
show_Info("对不起,移除文件时遇到问题!");echo_everyline("--");
return;
}
show_Info("文件复制完成!请拔出您的可移动存储设备!按【取消】键退出!");echo_everyline("--");
}


回复

使用道具 举报

千问 | 2021-1-27 06:43:50 | 显示全部楼层
看sysfs和mdev帮助
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行