加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在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]);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读