每当在Linux中使用inode创建新文件时,如何获取文件名以及文件的绝对路径?

2023-11-29

我用我的linux操作系统(CentOS)做了一些实验,我想跟踪在同一环境下创建的所有工具日志,工具生成相应的日志(.log extn)来跟踪这些更改我编写了一个perl观察程序,它实际上监视目录我设置的,当创建新文件时,它将显示在输出中,但这会消耗大量内存和 CPU 利用率,因为我设置了 2 秒作为睡眠时间。

我的问题“有更好的方法吗?”我想到使用索引节点表来跟踪系统中的所有更改。这可以解决我的问题吗?如果是,请让我们知道解决方案?


看来您想监视目录的更改。这是一项复杂的工作,但有很好的模块。最容易推荐的可能是Linux::Inotify2

该模块实现了 Linux 2.6.13 及更高版本 Inotify 文件/目录更改通知系统的接口。

这似乎符合你想要的。

任何此类监视器都需要额外的事件处理。本示例使用AnyEvent.

use warnings;
use strict;
use feature 'say';

use AnyEvent;
use Linux::Inotify2;

my $dir = 'dir_to_watch';

my $inotify = Linux::Inotify2->new  or die "Can't create inotify object: $!";

$inotify->watch( $dir, IN_MODIFY | IN_CREATE, sub {
    my $e = shift;
    my $name = $e->fullname;
    say "$name modified" if $e->IN_MODIFY;    # Both show the new file
    say "$name created"  if $e->IN_CREATE;    # but see comments below
});

my $inotify_w = AnyEvent->io (
    fh => $inotify->fileno, poll => 'r', cb => sub { $inotify->poll }
);

1 while $inotify->poll;

如果你只关心new文件,那么你只需要上面的一个常量。 对于这两种类型的事件$name有新文件的名称。从man inotify在我的系统上

... the name返回的字段inotify_event结构标识目录中文件的名称。

The inotify_event结构适当地表示为Linux::Inotify2::Watcher object.

Using IN_CREATE对于您的目的来说似乎是一个明显的解决方案。我通过创建两个文件进行测试,其中两个文件重定向echo在同一命令行上用分号分隔的命令,也可以用touch-ing 一个文件。写入的文件被检测为单独的事件,因此touch-ed 文件。

Using IN_MODIFY也可能有效,因为它监视(在$dir)

...监视对象中的任何文件系统对象(始终是目录),即文件、目录、符号链接、设备节点等...

至于测试,这两个文件都是由echo如上所述,作为单独的事件进行了报道。但一个touch-ed 文件是not报告,因为数据没有更改(文件没有写入)。

哪种更适合您的需求取决于细节。例如,工具可能会在启动时打开日志文件,但稍后才写入该文件。在这种情况下,上述两种方式的表现会有所不同。所有这些都应该根据您的具体情况仔细调查。

我们可能会想到竞争条件,因为当代码执行其他文件时可能会滑入。但该模块比这要好得多,并且它确实在处理程序完成后报告新的更改。我通过在代码运行(和睡眠)时创建文件进行测试并报告它们。

其他一些值得注意的事件驱动编程框架是POE and IO::异步.

The 文件::监视器也做这种工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

每当在Linux中使用inode创建新文件时,如何获取文件名以及文件的绝对路径? 的相关文章

随机推荐

  • 使用 CSS/Javascript 将文本字段中的文本更改为点

    有没有一种方法可以 屏蔽 文本字段的输入 使其像密码字段一样 显示点而不是文本 而无需将文本框设置为密码类型 与 JavaScript 相比 我们更喜欢 CSS 有任何想法吗 这可能是您正在寻找的答案 webkit text securit
  • 操作系统时区更改tomcat需要重新启动

    我的 Web 应用程序在 Apache Tomcat 7 0 上运行 我们调用 java util calendar 来获取服务器日期时间 问题是 如果系统时区发生更改 java 日历将继续以 旧 时区的日期时间运行 Tomcat使用的JD
  • PHP 缓存控制似乎不起作用

    请看一下我的网站 vynora 事情还没有完成 我在 HTML 页面的顶部放置了一个 PHP 标头 当我访问 Google 的 pagespeed 时 它告诉我应该优化浏览器缓存 请看一下 谷歌页面速度 但我已经使用 PHP 做到了 那么这
  • MySQL 导出到 outfile:CSV 转义字符

    我有一个带有一些常见字段的时间表数据库表 id client id project id task id description time date 还有更多 但这就是要点 我连夜将该表导出到 CSV 文件 以便为用户提供数据备份 它还可用
  • ggplot2 中的自动非等距中断

    我创建了一个简单的散点图ggplot2并用颜色可视化 z 变量 require ggplot2 data data frame x runif 1000 y runif 1000 vis rf 1000 df1 1 df2 3 qplot
  • 如何突出显示当前页面的菜单链接?

    这是一个非常常见的问题 但我找不到针对我的情况的任何解决方案 我正在制作一个相当大的网站 有数百个页面 因此我创建了每个页面都相同的页眉页和页脚页 现在我想突出显示当前页面的菜单按钮 但我的菜单位于我在每个页面中包含的标题中所以我尝试的一切
  • 如何创建水平动态 UICollectionView 单元格?迅速

    嘿 我正在尝试使用集合视图单元在视图控制器中显示一组 标签 但我无法找到一种方法使它们能够根据字符串的长度动态调整大小 现在 各个单元格的大小都是静态的 因此每当用超出单元格大小的字符填充单元格的字符串时 它就会进入第二行 我希望单元格可以
  • 使用抽象类型而不是参数类型进行 F 绑定多态性?

    如何使用抽象类型将以下 F 绑定多态性转换为代码 trait Organism Self lt Organism Self self Self gt def reproduceWith org Self Boolean class Amoe
  • 如何在 Spring Boot + Spring Security 应用程序中配置 CORS?

    我将 Spring Boot 与 Spring Security 和 Cors 支持结合使用 如果我执行以下代码 url http localhost 5000 api token xmlhttp new XMLHttpRequest xm
  • Mysql 提取特定列中每个单词的首字母

    我想在表中创建一个缩写词列 我想从 名称 列中获取每个单词的第一个字母 将其大写 然后将所有单词连接到 首字母缩略词 列中 有什么简单的方法来获取第一个字母吗 这是一个 改进 的功能 允许通过正则表达式仅过滤想要的字符 功能initials
  • Lambda 上的木偶师

    我想用puppeteer在 Lambda 上将 HTML 转换为 PDF 随着chrome aws lambda模块或puppeteer模块 我正在尝试运行 sam local invoke 一个调用的函数puppeteer launch
  • 5 月 1 日后弃用后,offline_access 将如何工作?

    我做了一些测试 发现结果与 Facebook 的文档相矛盾 https developers facebook com roadmap offline access removal 如果我们启用 弃用离线访问 并在移动客户端请求离线访问 我
  • Android Gradle 插件需要 Java 11 才能运行。您当前使用的是 Java 1.8。 **EXPO.dev**

    我正在尝试使用该命令eas build p android构建我的安卓 aab文件 但每次我尝试这样做时 我都会发现错误 Android build failed Gradle build failed with unknown error
  • 如何在 Python 中将参数方程拟合到数据点

    我正在寻找一种适合的方式参数方程使用 Python 生成一组数据点 作为一个简单的例子 给出了以下数据点集 import numpy as np x data np array 1 2 3 4 5 y data np array 2 0 3
  • 是否可以在 Cassandra 中以 CQL blob 类型存储 PDF 文件?

    以避免有关问题 为什么使用 cassandra 而选择其他数据库 我们必须这样做 因为我们的客户决定我的选择是一个完全错误的决定 在我们的应用程序中 我们必须处理 PDF 文档 即阅读它们并用数据填充它们 所以我的目的是将文档 模板 保存在
  • 在 C# 中使用数字设置颜色

    我可以使用画笔设置对象的颜色 如下所示 Brushes Red 如何使用数字应用相同的方法 say SetColor ffffff 上面是一个想象的例子 您可以使用ColorTranslator FromHtml 编辑 为了回应您的评论 您
  • Asyncio 与另一个协程同时运行 Dash (Flask) 服务器

    我创建了一个 dash 应用程序来显示另一个代码正在收集的信息 我想使用 Python 中的 asyncio 模块同时运行它们 我的代码使用异步函数 而 Dash 应用程序 基于 Flask 在服务时阻止其他任何内容执行 我不确定这是否需要
  • 如何使用 gl.lineWidth()

    其他一切都进展顺利 界限正在绘制中 它似乎只是忽略了 gl lineWidth 调用 我还有什么需要做的吗 gl lineWidth 17 gl drawArrays this drawMode 0 totalVertices 我是否有可能
  • Javascript RegExp 在具有嵌套子字符串的字符串上应用跨度标签

    示例字符串 There is a red car parked in front of a blue house with a fence painted red 要使用跨度突出显示的字符串是 red car blue house red
  • 每当在Linux中使用inode创建新文件时,如何获取文件名以及文件的绝对路径?

    我用我的linux操作系统 CentOS 做了一些实验 我想跟踪在同一环境下创建的所有工具日志 工具生成相应的日志 log extn 来跟踪这些更改我编写了一个perl观察程序 它实际上监视目录我设置的 当创建新文件时 它将显示在输出中 但