gpt4 book ai didi

perl - 如何获得符号链接(symbolic link)的高分辨率 mtime?

转载 作者:行者123 更新时间:2023-12-04 03:46:52 25 4
gpt4 key购买 nike

我想重现 ls --full-time 的输出来自 Perl 脚本以避免调用 ls 的开销几千次。我希望使用 stat函数并从那里获取所有信息。但是, ls 输出中的时间戳使用高分辨率时钟,因此它也包括纳秒数(根据 GNU 文档,这是因为 --full-time 等效于 --format=long --time-style=full-iso 和全等时间样式包括纳秒)。
我遇到了Time::HiRes模块,它用一个以浮点数返回 atime/mtime/ctime 的函数覆盖标准 stat 函数,但没有覆盖 lstat .这是一个问题,因为在符号链接(symbolic link)上调用 stat 返回链接文件的信息,而不是链接本身的信息。
所以我的问题是——我在哪里可以找到与 Time::HiRes::stat 一样返回 atime/mtime/ctime 的 lstat 版本?如果做不到这一点,是否有另一种方法可以获取高分辨率符号链接(symbolic link)的 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 - 如何获得符号链接(symbolic link)的高分辨率 mtime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2470465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com