我正在用C语言编程(在嵌入式环境中)。 USB可以连接到该设备。现在,当我通过我的代码将文件从USB复制到该设备时,如果有人移除了pendrive,那么我们如何检测pendrive的移除或如何处理这种情况。
设备架构:ARM,Linux平台
我可以通过比较源中的文件大小(复制位置和应该复制的目标位置)来检查文件是否完全复制。 但请告诉我任何其他方法来确保成功复制文件(如果在其间删除了pendrive)。我这样复制:
sprintf(str, "cp %s%s /mnt/disk/.;sync", FILE_OP_PATH, name);
96 system(str);
答案 0 :(得分:4)
好吧,如果源设备突然丢失,您正在进行的系统调用(直接或间接通过标准库)将失败。
如果你使用普通的read()
来读取USB驱动器,我会认为它失败并将errno
设置为EIO
,正如文档所述:
从磁盘或磁带读取时出现低级I / O错误时,也可能发生这种情况。
将驱动器强制卸载到中间读取的声音对我来说就像是“低级I / O错误”。
根据上述情况,首先检测故障可能最容易,当然您的复制代码已经完成了,然后作为后续尝试提出错误的诊断并导致错误,您可以可能会检查安装台,看看设备是否还在。
答案 1 :(得分:1)
这是一个低级错误,文件系统也会处于不干净的状态,也应该进行验证。
这是预期的操作方法还是更罕见的错误事件?
如果是测试用例,请确保您的代码不会爆炸或执行其他奇怪的操作,例如无限循环重试写入。设备上的文件系统也可能处于不干净的状态,因为你正在谈论USB我在想VFAT。可能会报告错误的文件大小。
答案 2 :(得分:0)
虽然我的解决方案很慢,但您可以尝试复制if(fopen("myfile", "r")!=NULL)
:)
答案 3 :(得分:0)
您可以使用和配置udev
,以便在USB端口上插入或拔下插头时收到通知。