Linux C 进程等待文件复制完成(shell 命令)

Linux C process wait till copy of files completed (shell command)

我正在尝试将多个文件夹和文件从一个文件夹 (linux SBC) 复制到另一个文件夹(USB 安装文件夹)。

我的过程完全用 C 语言编写。linux 系统是一个 SBC 运行 YOCTO,它没有 rsync 可用。

我对大多数命令使用了 popen 命令,例如 mountumount 等。 但是对于复制(cp命令)我不确定如何等待复制完成。

我在我的 C 代码中使用以下格式并且它有效(复制有效)

system("yes | cp -rf " USB_DATA_SOURCE_PATH " " USB_DATA_DESTINATION_PATH);

我需要复制多个文件,可以有任意数量的动态名称文件。我所需要的只是一种知道复制已完成并且对 umount 安全并向用户指示的方法。

如评论中所暗示:

  1. system() 等到 cp 完成,因此您不必添加任何等待周期。
  2. 但是cp returns 复制的数据不一定已经从缓冲区写入磁盘。您可以显式调用 sync 来实现这一点。
  3. 但是 umount 已经确保缓存被 synced/buffers 刷新;这就是为什么有时需要一些时间才能 umount returns.

总而言之,cpumount 之间不需要明确的 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不变的退出代码以防失败。