我有一个linux (Fedora)程序,它可以检测U盘的插入情况,并通过调用
系统(“rsync...
一旦系统调用返回,我就会提示用户移除U盘。问题是,系统调用在rsync完成将所有文件复制到U盘之前返回。一旦文件足够大,用户就可以在所有文件被复制之前轻松地拔出操纵杆。
除了编写我自己的cpdir命令之外,有没有人知道有没有办法解决这个问题?我在system()调用或rsync (或cp )上看不到任何强制“等待复制完成”状态的选项。
提前谢谢。
戴夫
发布于 2009-07-16 19:03:32
您需要在调用rsync之后调用sync()。在将所有挂起的数据写入磁盘之前,同步不会返回。
从手册页:
同步函数
()强制将块缓冲区缓存中的脏(修改过的)缓冲区写出到磁盘。内核将此信息保存在内核中,以减少系统所需的磁盘I/O传输次数。当系统崩溃后缓存中的信息丢失时,用户进程update(8)会频繁地发出sync()调用(大约每30秒)。
发布于 2009-07-16 17:20:33
如何确定调用返回的时间早于预期?通常,它不应该这样做,除非您在命令后显式地将其发送到后台,并在后面加上一个&
字符。
我认为rsync结束了,但是数据并没有真正写入U盘。您必须正确卸载驱动器,并等待umount
命令完成。
发布于 2009-07-16 17:23:39
使用两个线程,您将同步...做取棒的等待做rsync的?
https://stackoverflow.com/questions/1138991
复制相似问题