我正在尝试将一个文件夹(Linux SBC)中的多个文件夹和文件从一个进程复制到另一个文件夹(USB挂载文件夹)。
我的过程完全用C编写.linux系统是运行YOCTO的SBC,它没有rsync
可用。
我对popen
,mount
等大多数命令使用了umount
命令。
但是对于复制(cp
命令),我不确定如何等待副本完成。
我在我的C代码中使用以下格式,它可以正常工作(复制工作)
system("yes | cp -rf " USB_DATA_SOURCE_PATH " " USB_DATA_DESTINATION_PATH);
我需要复制多个文件,并且可以有任意数量的具有动态名称的文件。我需要的只是一种方式来了解复制已完成并且对umount
是安全的,并向用户表明。
答案 0 :(得分:1)
正如评论中所暗示的那样:
system()
等待cp
完成,因此您无需添加任何等待周期。cp
返回复制的数据时,可能不一定已经从缓冲区写入磁盘。您可以明确调用sync
来实现此目的。umount
已经确保缓存被同步/缓冲刷新;这就是为什么有时需要一些时间才能umount
返回。要将其全部包装起来,sync
和cp
之间不需要明确的umount
,除非之间还有其他操作,并且您希望确保数据同步当USB磁盘从机器中拉出而未正确卸载时。在这种情况下,您最好的选择是延长system()
来电:
system("yes | cp -rf " USB_DATA_SOURCE_PATH " " USB_DATA_DESTINATION_PATH "; sync");
强制sync
独立于复制命令的成功,或
system("yes | cp -rf " USB_DATA_SOURCE_PATH " " USB_DATA_DESTINATION_PATH " && sync");
如果您需要获取cp
的未更改退出代码,以防它失败。