rsync完成之前系统调用返回

时间:2009-07-16 17:13:04

标签: c++ linux

我有一个linux(Fedora)程序,可以检测到USB记忆棒的插入,并通过调用

进行自动备份

系统(“rsync的...

系统调用返回后,我提示用户移除USB记忆棒。问题是系统调用在rsync完成将所有文件复制到USB记忆棒之前返回。一旦文件足够大,用户就可以在文件全部复制之前轻松拔出。

没有写我自己的cpdir命令有没有人知道是否有办法解决这个问题?我没有在system()调用或rsync(或cp)上看到任何强制“等待复制完成”状态的选项。

提前致谢。

戴夫

4 个答案:

答案 0 :(得分:1)

调用rsync后需要调用sync()。在将所有待处理数据写入磁盘之前,Sync不会返回。

从手册页:

  

sync()函数强制在块中写入脏(修改)缓冲区        缓冲区缓存到磁盘。内核将此信息保存在核心中        减少系统所需的磁盘I / O传输次数。作为信息 -        系统崩溃后,缓存中的信息丢失,发出sync()调用        用户进程更新(8)(大约每30秒)。

答案 1 :(得分:0)

如何确定呼叫返回的时间早于预期?通常情况下,除非您在命令后使用尾随&字符将其显式发送到后台,否则不应该这样做。

我认为rsync已经完成,但数据并没有真正写入usb-stick。您必须正确卸载驱动器并等待umount命令完成。

答案 2 :(得分:0)

使用你要同步的2个线程...使那个移除棒的线程等待进行rsync的线程?

答案 3 :(得分:0)

在USB设备上运行umount之前,检查是否有任何进程(即rsync)仍在使用它:

Linux: Which process is causing "device busy" when doing umount?