如何在Perl中获得符号链接的高分辨率mtime?

前端之家收集整理的这篇文章主要介绍了如何在Perl中获得符号链接的高分辨率mtime?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想从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]);

猜你在找的Perl相关文章