复制文件时删除笔驱动器

时间:2012-01-17 08:45:05

标签: c linux filesystems embedded

我正在用C语言编程(在嵌入式环境中)。 USB可以连接到该设备。现在,当我通过我的代码将文件从USB复制到该设备时,如果有人移除了pendrive,那么我们如何检测pendrive的移除或如何处理这种情况。

设备架构:ARM,Linux平台

我可以通过比较源中的文件大小(复制位置和应该复制的目标位置)来检查文件是否完全复制。 但请告诉我任何其他方法来确保成功复制文件(如果在其间删除了pendrive)。我这样复制:

 sprintf(str, "cp %s%s /mnt/disk/.;sync", FILE_OP_PATH, name);
 96                 system(str);

4 个答案:

答案 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端口上插入或拔下插头时收到通知。