如何在Perl中获得符号链接的高分辨率mtime?
发布时间:2020-12-15 21:50:13 所属栏目:大数据 来源:网络整理
导读:我想从Perl脚本重现ls –full-time的输出,以避免调用ls几千次的开销.我希望使用 stat功能并从那里获取所有信息.但是,ls输出中的时间戳使用高分辨率时钟,因此它也包含纳秒数(根据GNU文档,这是因为–full-time相当于–format = long –time- style = full-iso,
我想从Perl脚本重现ls –full-time的输出,以避免调用ls几千次的开销.我希望使用
stat功能并从那里获取所有信息.但是,ls输出中的时间戳使用高分辨率时钟,因此它也包含纳秒数(根据GNU文档,这是因为–full-time相当于–format = long –time- style = full-iso,full-iso时间样式包括纳秒.
我遇到了Time::HiRes模块,它覆盖了标准的stat函数,其中一个返回atime / mtime / ctime作为浮点数,但没有覆盖lstat.这是一个问题,因为在符号链接上调用stat会返回链接的信息文件,而不是链接本身. 所以我的问题是 – 在哪里可以找到一个版本的lstat以与Time :: HiRes :: stat相同的方式返回atime / mtime / ctime?如果失败了,是否有另一种方法可以获得高分辨率的符号链接的modtime(除了调用ls). 解决方法
如果您愿意使用Inline :: C,这将适用于最近的Linux
#!/usr/bin/perl use strict; use warnings; use Inline C => <<'EOC'; #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> long mtime_nsec(char* fname) { struct stat st; if (-1 == lstat(fname,&st)) return -1; return (long)st.st_mtim.tv_nsec; } EOC print mtime_nsec($ARGV[0]); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |