Linux C 进程等待文件复制完成(shell 命令)
Linux C process wait till copy of files completed (shell command)
我正在尝试将多个文件夹和文件从一个文件夹 (linux SBC) 复制到另一个文件夹(USB 安装文件夹)。
我的过程完全用 C 语言编写。linux 系统是一个 SBC 运行 YOCTO,它没有 rsync
可用。
我对大多数命令使用了 popen
命令,例如 mount
、umount
等。
但是对于复制(cp
命令)我不确定如何等待复制完成。
我在我的 C 代码中使用以下格式并且它有效(复制有效)
system("yes | cp -rf " USB_DATA_SOURCE_PATH " " USB_DATA_DESTINATION_PATH);
我需要复制多个文件,可以有任意数量的动态名称文件。我所需要的只是一种知道复制已完成并且对 umount
安全并向用户指示的方法。
如评论中所暗示:
system()
等到 cp
完成,因此您不必添加任何等待周期。
- 但是 当
cp
returns 复制的数据不一定已经从缓冲区写入磁盘。您可以显式调用 sync
来实现这一点。
- 但是
umount
已经确保缓存被 synced/buffers 刷新;这就是为什么有时需要一些时间才能 umount
returns.
总而言之,cp
和 umount
之间不需要明确的 sync
,除非在两者之间有其他操作并且您想要确保数据是正确的即使 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
不变的退出代码以防失败。
我正在尝试将多个文件夹和文件从一个文件夹 (linux SBC) 复制到另一个文件夹(USB 安装文件夹)。
我的过程完全用 C 语言编写。linux 系统是一个 SBC 运行 YOCTO,它没有 rsync
可用。
我对大多数命令使用了 popen
命令,例如 mount
、umount
等。
但是对于复制(cp
命令)我不确定如何等待复制完成。
我在我的 C 代码中使用以下格式并且它有效(复制有效)
system("yes | cp -rf " USB_DATA_SOURCE_PATH " " USB_DATA_DESTINATION_PATH);
我需要复制多个文件,可以有任意数量的动态名称文件。我所需要的只是一种知道复制已完成并且对 umount
安全并向用户指示的方法。
如评论中所暗示:
system()
等到cp
完成,因此您不必添加任何等待周期。- 但是 当
cp
returns 复制的数据不一定已经从缓冲区写入磁盘。您可以显式调用sync
来实现这一点。 - 但是
umount
已经确保缓存被 synced/buffers 刷新;这就是为什么有时需要一些时间才能umount
returns.
总而言之,cp
和 umount
之间不需要明确的 sync
,除非在两者之间有其他操作并且您想要确保数据是正确的即使 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
不变的退出代码以防失败。