Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找最近写入的文件(unix):查找“正在出现”;不够好”;_Unix_Find - Fatal编程技术网

查找最近写入的文件(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中实际发生的情况。