代码之家  ›  专栏  ›  技术社区  ›  Feroze Mohamed

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

  •  4
  • Feroze Mohamed  · 技术社区  · 6 年前

    我正在尝试从一个进程将多个文件夹和文件从一个文件夹(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公司 并向用户指示。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Murphy    6 年前

    正如评论中所暗示的:

    1. system() 等待,直到 cp 已完成,因此不必添加任何等待周期。
    2. 但是 什么时候 cp公司 返回复制的数据不一定已经从缓冲区写入磁盘。你可以打电话 sync 明确地实现这一点。
    3. 但是 umount 已确保缓存同步/缓冲区刷新;这就是为什么有时需要一些时间 umount公司 返回。

    总而言之,不需要明确的 同步 之间 cp公司 umount公司 ,除非和之间有其他操作,您希望确保即使在未正确卸载的情况下将USB磁盘从计算机中拉出时,数据也已同步。在这种情况下,最好的选择是延长 系统() 电话:

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

    强制 同步 与copy命令的成功无关,或

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

    如果需要获取未更改的退出代码 cp公司 以防失败。