当前位置: 技术问答>linux和unix
opendir,readdir 的问题
来源: 互联网 发布时间:2016-06-16
本文导语: 假设我扫描的目录为 $DATAPATH,这个目录下会有个文件file1,每当我readdir得到的结果为file1时我就处理该文件。 但是,file1是别的程序从其他的地方拷贝过来,文件很大,readdir得到的文件会不完整, 如何避免这个问题...
假设我扫描的目录为 $DATAPATH,这个目录下会有个文件file1,每当我readdir得到的结果为file1时我就处理该文件。
但是,file1是别的程序从其他的地方拷贝过来,文件很大,readdir得到的文件会不完整,
如何避免这个问题?
但是,file1是别的程序从其他的地方拷贝过来,文件很大,readdir得到的文件会不完整,
如何避免这个问题?
|
我又没让你去比较checksum
只是对一个存在的文件进行cksum操作
如果文件还未完全拷贝完/或者说资源正忙碌,其是无法得到checksum的
|
你的问题实际上就是想知道其他程序何时完成文件copy
当你readdir到文件file1时,可以对其进行改名操作/rm,或者计算checksum/cksum等操作
如果成功则说明文件已经完成,之后就可以对其进行操作了
当你readdir到文件file1时,可以对其进行改名操作/rm,或者计算checksum/cksum等操作
如果成功则说明文件已经完成,之后就可以对其进行操作了
|
简单的说,只有复制这个文件的进程知道复制是否成功,所以所有的手脚都应该由复制这个文件的进程去做:
1、使用临时文件名,当复制完成,经过校验之后,再改名为目标文件名(如用 ~copy_file_XXX.tmp 等名字)
2、复制文件之前先复制一个同名.MD5SUM 的文件,写上源文件的 MD5 checksum 值;这样利用文件的进程可以自己做检查。
3、等等,扩展性思维吧。
1、使用临时文件名,当复制完成,经过校验之后,再改名为目标文件名(如用 ~copy_file_XXX.tmp 等名字)
2、复制文件之前先复制一个同名.MD5SUM 的文件,写上源文件的 MD5 checksum 值;这样利用文件的进程可以自己做检查。
3、等等,扩展性思维吧。
|
如果确保复制文件的进程不会中途失败,可以 lsof /file 检查是否有进程正在写入这个文件。