查找最近写入的文件(unix):查找“正在出现”;不够好”;
我运行了以下命令:查找最近写入的文件(unix):查找“正在出现”;不够好”;,unix,find,Unix,Find,我运行了以下命令: find . -type f | xargs ls -ltrhg 以便在程序运行时获取最近写入的文件 结果很奇怪:在列表的底部,我得到了最近的文件,但是最近创建的文件丢失了。。。就是为了测试,我直接跑了 touch asdf 接 find . -type f | xargs ls -ltrhg 然而,asdf并不是最新的 有没有想过为什么这个命令似乎忽略了最近写入的文件,却返回了几百个文件,并按照正确的编辑顺序进行编辑?程序在写入文件时最终调用write()。写入不会立
find . -type f | xargs ls -ltrhg
以便在程序运行时获取最近写入的文件
结果很奇怪:在列表的底部,我得到了最近的文件,但是最近创建的文件丢失了。。。就是为了测试,我直接跑了
touch asdf
接
find . -type f | xargs ls -ltrhg
然而,asdf并不是最新的
有没有想过为什么这个命令似乎忽略了最近写入的文件,却返回了几百个文件,并按照正确的编辑顺序进行编辑?程序在写入文件时最终调用write()。写入不会立即将任何内容放入磁盘
除非您的程序调用fdatasync()或它的一个类似函数,如fflush(),否则数据将保留在内核缓冲区中,直到内核决定将数据放入磁盘。您可以将一组数据写入一个文件,而无需开始物理写入磁盘。这是一个性能特性。与内存访问相比,磁盘I/O速度非常慢
这意味着,实际上,您的程序可以找到比当前正在写入的磁盘文件更新的其他磁盘文件。程序在写入文件时最终调用write()。写入不会立即将任何内容放入磁盘
除非您的程序调用fdatasync()或它的一个类似函数,如fflush(),否则数据将保留在内核缓冲区中,直到内核决定将数据放入磁盘。您可以将一组数据写入一个文件,而无需开始物理写入磁盘。这是一个性能特性。与内存访问相比,磁盘I/O速度非常慢
这意味着,在实践中,您的程序可以找到比当前正在编写的文件更新的其他磁盘文件。问题可能是文件太多,以至于xargs将它们划分为多个ls调用
(我怀疑缓冲区缓存是问题所在。除非这是某种异国情调的Unix分布式版本,否则find、xargs和ls都应该读取和写入相同的缓冲区缓存。)问题可能是因为有太多的文件,xargs会将它们分为几个ls调用
(我怀疑缓冲区缓存是问题所在。除非这是某种异国情调的Unix分布式版本,否则find、xargs和ls都应该读取和写入相同的缓冲区缓存。)我刚刚尝试了你的
touch…
find…
序列,它对我有效(在一个只有几个文件的目录中)。asdf
是否显示?某个进程是否同时创建或更新该目录中的文件?顺便说一句,这在superuser.com上更合适;我已经投票决定关闭并迁移它。我刚刚尝试了你的触摸…
查找…
序列,它对我有效(在一个只有几个文件的目录中)。asdf
是否显示?某个进程是否同时创建或更新该目录中的文件?顺便说一句,这在superuser.com上更合适;我投票决定关闭并迁移它。听起来不错-那么。。。。。您是否建议其他步骤正确,但必须以fdatasync或fflush作为前缀?同步操作(fflush或其他任何操作)强制写入磁盘。请注意,有时更新文件元数据会延迟到文件关闭。这是文件系统depddent,取决于用于装载文件系统的选项。元数据是stat()(find使用stat())用来确定文件mtimes的内容。听起来不错-那么。。。。。您是否建议其他步骤正确,但必须以fdatasync或fflush作为前缀?同步操作(fflush或其他任何操作)强制写入磁盘。请注意,有时更新文件元数据会延迟到文件关闭。这是文件系统depddent,取决于用于装载文件系统的选项。元数据是stat()(find使用stat())用来确定文件MTIME的。这是不正确的。阅读Stevens的“UNIX环境中的高级编程”,看看UNIX文件I/O中实际发生了什么。这是不正确的。阅读Stevens的“UNIX环境中的高级编程”,了解UNIX文件I/O中实际发生的情况。