LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1638|回复: 5

关于拷贝时显示进度条的问题

[复制链接]
发表于 2003-9-9 15:18:21 | 显示全部楼层 |阅读模式
以前有个贴子讨论,后来我自己也用dialog作了一个进度条拷贝程序。
但是,遇到一个问题:在从硬盘向软盘拷贝的过程中,进度条一下就到顶了,但拷贝工作才刚刚开始。
测试向软盘拷贝文件,发现刚一执行拷贝文件,du 出来的结果就是文件本身大小。应该是文件已被全写入缓存之中,但还要花很长时间刷到软盘里。
请问,怎样让进度条拷贝程序在向软盘拷贝时也正常工作?能不能先把一个文件拆成等大小的几块,一块块拷过去,再合并起来?
发表于 2003-9-9 17:59:19 | 显示全部楼层
 楼主| 发表于 2003-9-10 09:16:22 | 显示全部楼层

早看过了阿

没找到解决方法。
发表于 2003-9-10 14:38:09 | 显示全部楼层
如果你原意的话,把你的脚本代码帖出来,让兄弟们看一看问题出在何处?,OK? ;)
发表于 2003-9-10 16:22:48 | 显示全部楼层
这问题恐怕不是 cp 的问题,而是操作系统的虚拟文件系统对设备读写进行了缓冲。这是现代操作系统大多采用的方法,所以写入一个几百K的文件到软盘经常都是瞬间完成:其实这时只是在内存中完成了写入,等到 page out 时才会真正写入软盘(可以用 sync 指令强制系统进行页出操作)。所以 *nix 的教科书里总是提醒大家要先 umount 软驱等设备然后再取出软盘。
要想真正检测文件拷贝进度,得绕过虚拟文件系统的缓冲,采用“直接写入”的方式拷贝文件:不过抱歉,我不知道应该用什么命令(印象中有一个支持直写模式的命令,忘了是什么了)。当然,采用 direct write 会使文件系统的 IO 效率下降,而 IO 效率也正是 unix 中增加这层缓冲的原因之一。
 楼主| 发表于 2003-9-10 17:19:02 | 显示全部楼层

我也知道是缓存的问题

如果这样,拷贝多个文件也应该是同样效果。
如果我直接做一个1440M的文件,做成FAT或EXT2文件格式,以loop方式挂上,把文件全部拷到这个文件里,然后用dd if=filename of=/dev/fd0 bs=1k count=1440,这样缓存是否仍会起作用呢?
回头试试。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表