社区
Linux/Unix社区
帖子详情
opendir,readdir 的问题
frazer
2009-07-09 11:23:23
假设我扫描的目录为 $DATAPATH,这个目录下会有个文件file1,每当我readdir得到的结果为file1时我就处理该文件。
但是,file1是别的程序从其他的地方拷贝过来,文件很大,readdir得到的文件会不完整,
如何避免这个问题?
...全文
162
8
打赏
收藏
opendir,readdir 的问题
假设我扫描的目录为 $DATAPATH,这个目录下会有个文件file1,每当我readdir得到的结果为file1时我就处理该文件。 但是,file1是别的程序从其他的地方拷贝过来,文件很大,readdir得到的文件会不完整, 如何避免这个问题?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Wolf0403
2009-07-10
打赏
举报
回复
如果确保复制文件的进程不会中途失败,可以 lsof /file 检查是否有进程正在写入这个文件。
Wolf0403
2009-07-10
打赏
举报
回复
简单的说,只有复制这个文件的进程知道复制是否成功,所以所有的手脚都应该由复制这个文件的进程去做:
1、使用临时文件名,当复制完成,经过校验之后,再改名为目标文件名(如用 ~copy_file_XXX.tmp 等名字)
2、复制文件之前先复制一个同名.MD5SUM 的文件,写上源文件的 MD5 checksum 值;这样利用文件的进程可以自己做检查。
3、等等,扩展性思维吧。
frazer
2009-07-09
打赏
举报
回复
我并不知道文件file1被拷贝来之前的cksum结果,所以cksum也就行不通
有没有其他的方法,通过什么属性之类的能判断出来吗
Treazy
2009-07-09
打赏
举报
回复
你的问题实际上就是想知道其他程序何时完成文件copy
当你readdir到文件file1时,可以对其进行改名操作/rm,或者计算checksum/cksum等操作
如果成功则说明文件已经完成,之后就可以对其进行操作了
Treazy
2009-07-09
打赏
举报
回复
[Quote=引用 2 楼 frazer 的回复:]
我并不知道文件file1被拷贝来之前的cksum结果,所以cksum也就行不通
有没有其他的方法,通过什么属性之类的能判断出来吗
[/Quote]
我又没让你去比较checksum
只是对一个存在的文件进行cksum操作
如果文件还未完全拷贝完/或者说资源正忙碌,其是无法得到checksum的
frazer
2009-07-09
打赏
举报
回复
我的意思是opendir,然后readdir,这个时候得到的文件可能还没被完全拷贝到这个目录下,我这样就只能得到文件的一部分了
我不清楚这个文件是否在被拷贝。
猫已经找不回了
2009-07-09
打赏
举报
回复
比较实用的是,在拷贝的时候,使用另一个文件锁来同步。
ShowMan
2009-07-09
打赏
举报
回复
tripwire和AIDE
PHP遍历目录函数
open
d
ir
()、read
d
ir
()、close
d
ir
()、rewind
d
ir
()总结
在进行PHP编程时,需要对服务器某个目录下面的文件进行浏览,通常成为遍历目录。取得一个目录下的文件和子目录,就需要用到
open
d
ir
()函数、read
d
ir
()函数、close
d
ir
()函数和rewind
d
ir
()函数。 ①函数
open
d
ir
() 函数
open
d
ir
()用于打开指定目录,接受一个目录的路径及目录名作为参数,函数返回值为可供其他目录函数使用的目录句柄(资源类型)。如果该目录不存在或者没有访问权限,则返回FALSE。 ②函数read
d
ir
() 函数read
d
ir
()用于读取指定目录,接受已经用
open
d
ir
()函数打开的可操作目录句柄作为参数,函数返回当前目录指针位置的一个文件名,
read
d
ir
,
open
d
ir
,close
d
ir
详解
read
d
ir
,
open
d
ir
,close
d
ir
详解
C语言:
open
d
ir
()函数—打开目录函数,read
d
ir
()函数—读取目录函数,所需的头文件~
d
ir
ent.h
d
ir
ent.h:
open
d
ir
()函数—打开目录函数,read
d
ir
()函数—读取目录函数,所需的头文件;
d
ir
ent.h文件在压缩包的 include 目录中,examples目录中为一些使用示例。
linux中,minishell复现
minishell 实现功能:ls
open
d
ir
read
d
ir
close
d
ir
ls -a
open
d
ir
read
d
ir
close
d
ir
ls -l touch f
open
fclose rm remove mk
d
ir
mk
d
ir
rm
d
ir
rm
d
ir
cp IO cd ch
d
ir
cat IO pwd getcwd mv rename chmod
minishell.zip
项目要求: 编程实现一个软件程序Minishell用来模拟Shell的使用 1.MiniShell具备与用户交互的界面 2.MiniShell具备支持以下命令功能: 1.ls
open
d
ir
read
d
ir
close
d
ir
ls -a ls -l 2.touch
open
3.rm remove 4.mk
d
ir
mk
d
ir
5.rm
d
ir
rm
d
ir
6.cd chi
d
ir
7.pwd getcwd 8.cp 标准IO 9.mv 10.cat 标准IO 11.ln link ln -s symlink 12.find 目录递归遍历 13.chmod chmod 14.exit exit 3.MiniShell后台需记录用户输入命令的日志信息 格式如下: [2019-12-29 13:59:32]ls
Linux/Unix社区
23,125
社区成员
74,509
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章