C 中“tail -f”功能的自定义实现

2024-02-07

EDIT:我最后使用了inotify。正如 stefanB 所说,inotify 是最适合使用的东西。我发现了一个尾部克隆,它使用inotify来实现-f模式,inotail http://distanz.ch/inotail/.

问题原文:

我正在尝试在 C 项目中实现“tail -f”逻辑,出于原型设计的目的,我在 python 中开发了它,如下所示:


    # A forever loop, each 5 seconds writes a line into file.txt
    from time import *

    while 1:
        sleep(5)
        file = open("file.txt", "a")
        file.write("This is a test\n")
        file.close()

下一个代码位于 file.txt 的 eof 后面(由上面的代码更新)


    # tail -f 
    from time import *

    file = open("file.txt", "r")
    file.seek(0, 2)

    while 1:
      line = file.readline()
      if not line:
          sleep(1)
      else:
          print line

    file.close()

一切正常,但 C 实现不起作用(没有检查错误代码)。省略了 stdio.h、string.h 和 unistd.h 的包含(着色隐藏了标头包含代码)。


    #define LINE_LEN 256

    int main(int argc, char **argv)
    {
        FILE *f;
        char line[LINE_LEN];

        f = fopen("file.txt", "r");

        fseek(f, 0, SEEK_END);

        while (1)
        {
            fgets(line, LINE_LEN, f);

            if (strlen(line) == 0)
            {
                sleep(1);
            }
            else
            {
                printf("Readed: %s", line);
            } 
        }

        fclose(f);

        return 0;
    }

有什么想法吗?

使用 poll() 代替所提出的解决方案来实现它是一个好主意吗?

提前致谢。


EDIT: 似乎inotify http://www.linuxjournal.com/article/8478是要使用的东西。从 2.6.13 开始,它应该包含在 Linux 内核中。来自 IBM Developerworks 的有关 inotify 的文章 http://www.ibm.com/developerworks/linux/library/l-ubuntu-inotify/index.html?ca=drs-.

之前的回答:

看看Linux文件更改监视器 http://oss.sgi.com/projects/fam/faq.html(在 Linux 内核 2.4.x 中>)。它是一个框架,可让您订阅文件更改,并在更改发生时从内核获得回调。这应该比轮询更好。

如何轮询文件更改,查看部分等待文件更改 and 轮询文件更改.

我还没试过。

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

C 中“tail -f”功能的自定义实现 的相关文章

  • Flask 应用程序路由中的多个参数

    烧瓶怎么写app route如果我在 URL 调用中有多个参数 这是我从 AJax 调用的 URL http 0 0 0 0 8888 createcm summary VVV change Feauure 我试图写我的烧瓶app rout
  • 检索 geodjango 多边形对象的边界框

    如何在 geodjango 中获取 MultiPolygon 对象的边界框 在 API 中找不到任何内容http geodjango org docs geos html http geodjango org docs geos html
  • 检测 TextBox 中的 Tab 键按下

    I am trying to detect the Tab key press in a TextBox I know that the Tab key does not trigger the KeyDown KeyUp or the K
  • 为正则表达式编写解析器

    即使经过多年的编程 我很羞愧地说我从未真正完全掌握正则表达式 一般来说 当问题需要正则表达式时 我通常可以 在一堆引用语法之后 想出一个合适的正则表达式 但我发现自己越来越频繁地使用这种技术 所以 自学并理解正则表达式properly 我决
  • 如何使用 C# 查询远程 MS ACCESS .mdb 数据库

    我正在尝试使用 C 查询 mote MS ACCESS 数据库 mdb 文件 将文件复制到本地计算机时可以成功查询它 我只想远程放置文件 所以我的客户端程序不包含原始数据 static string m path http www xyz
  • 使用 selenium 和 python 来提取 javascript 生成的 HTML?萤火虫?

    这里是Python新手 我遇到的是数据收集问题 我在这个网站上 当我用 Firebug 检查我想要的元素时 它显示了包含我需要的信息的源 然而常规源代码 没有 Firebug 不会给我这个信息 这意味着我也无法通过正常的 selenium
  • 用数组或向量实现多维数组

    我想使用单个数组或向量实现多维数组 可以像通常的多维数组一样访问它 例如 a 1 2 3 我陷入困境的是如何实施 操作员 如果数组的维数为 1 则 a 1 应该返回位于索引 1 处的元素 但是如果维数大于一怎么办 对于嵌套向量 例如 3 维
  • 根据多个阈值将 SciPy 分层树状图切割成簇

    我想将 SciPy 的树状图切割成多个具有多个阈值的簇 我尝试过使用 fcluster 但它只能削减一个阈值 例如 这是我从另一个问题中摘取的一段代码 import pandas data pandas DataFrame total ru
  • 时间:2019-03-17 标签:c#TimerStopConfusion

    我想通过单击按钮时更改文本颜色来将文本框文本设置为 闪烁 我可以让文本按照我想要的方式闪烁 但我希望它在闪烁几次后停止 我不知道如何在计时器触发几次后让它停止 这是我的代码 public Form1 InitializeComponent
  • 寻找完美的正方形

    我有这个Python代码 def sqrt x ans 0 if x gt 0 while ans ans lt x ans ans 1 if ans ans x print x is not a perfect square return
  • PyQt5:如何使QThread返回数据到主线程

    I am a PyQt 5 4 1 1初学者 我的Python是3 4 3 这是我尝试遵循的many https mayaposch wordpress com 2011 11 01 how to really truly use qthr
  • 非法指令:MacOS High Sierra 上有 4 条指令

    我正在尝试在 pygame 3 6 中制作一个看起来像聊天的窗口 我刚刚将我的 MacBook 更新到版本 10 13 6 在我这样做之前它工作得很好 但在我收到消息之后 非法指令 4 Code import pygame from pyg
  • 值和类型的简洁双向静态 1:1 映射

    我将从我想象如何使用我想要创建的代码开始 它不必完全像这样 但它是我在标题中所说的 简洁 的一个很好的例子 就我而言 它是将类型映射到相关的枚举值 struct bar foo
  • 如何绘制更大的边界框和仅裁剪边界框文本 Python Opencv

    我正在使用 easyocr 来检测图像中的文本 该方法给出输出边界框 输入图像如下所示 Image 1 Image 2 使用下面的代码获得输出图像 But I want to draw a Single Bigger bounding bo
  • 如何知道 HTTP 请求标头值是否存在

    我确信这很简单 但是却让我感到厌烦 我在 Web 应用程序中使用了一个组件 它在 Web 请求期间通过添加标头 XYZComponent true 来标识自身 我遇到的问题是 如何在视图中检查此组件 以下内容不起作用 if Request
  • Emacs C++,打开相应的头文件

    我是 emacs 新手 我想知道 是否有在头文件 源文件和相应的源文件 头文件之间切换的快捷方式 是否有像通用 emacs 参考卡那样的参考卡 Thanks There s ff find other file 您可以使用以下方法将其绑定到
  • 如何在c中断言两个类型相等?

    在 C 中如何断言两种类型相等 在 C 中 我会使用 std is same 但搜索 StackOverflow 和其他地方似乎只能给出 C 和 C 的结果 在C中没有办法做到这一点吗 请注意 这不是询问变量是否具有某种类型 而是询问两个类
  • Jupyter Notebook:带有小部件的交互式绘图

    我正在尝试生成一个依赖于小部件的交互式绘图 我遇到的问题是 当我使用滑块更改参数时 会在前一个绘图之后完成一个新绘图 而我预计只有一个绘图会根据参数发生变化 Example from ipywidgets import interact i
  • 如何使用xlwt设置文本颜色

    我无法找到有关如何设置文本颜色的文档 在 xlwt 中如何完成以下操作 style xlwt XFStyle bold font xlwt Font font bold True style font font background col
  • 如何通过点击复制 folium 地图上的标记位置?

    I am able to print the location of a given marker on the map using folium plugins MousePosition class GeoMap def update

随机推荐

  • 消息总线中的总线发现

    我正试图了解消息总线和国际奥委会 但我的脑子里充满了问题 这就是我想到的场景 三台电脑通过局域网连接 无法访问互联网 这三台计算机各自运行一个服务 并自动自我发现其他计算机 换句话说 它们各自在公共总线上发送消息 这表明了他们自己的身份 从
  • 如何使用 Activator.CreateInstance 创建一个在运行时 T 未知的 List

    我在用着Activator CreateInstance通过类型变量创建对象 在运行时未知 static dynamic CreateFoo Type t gt Activator CreateInstance t 显然 我还没有正确理解如
  • 在构建期间调用 setState() 或 markNeedsBuild()。该覆盖小部件无法标记为需要构建

    我尝试在 AbsorbPointer 特别是 GestureDetector onPanEnd 调用的 fling 函数的 SetState 内使用 showGeneralDialog 编写动画对话框脚本 我附加了简单的代码 我尝试用未来的
  • std::atoll 与 VC++

    我一直在使用std atoll from cstdlib将字符串转换为int64 t与海湾合作委员会 该功能似乎在 Windows 工具链上不可用 使用 Visual Studio Express 2010 最好的选择是什么 我也有兴趣转换
  • 如何从 apt-get 下载软件包而不安装它? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我有一台电脑 没有NIC http en wikipedia org wiki Network interface controller 我想通过 U
  • 如何简化这些冗余的 C++ 代码?

    现有两个类 一个是SrcField它返回具体类型值 另一个是联合DSTField 定义相应的数据类型 class SrcField public signed char GetInt8 unsigned char GetUInt8 shor
  • 使用 SQL 在有向图中查找循环

    已经有几个关于查找循环的问题 但我没有在 SQL 中找到解决方案 首选 MSSQL 这些表将是 Node NodeID INT 和 Edge EdgeID INT NodeID1 INT NodeID2 INT 在有向图中查找循环的性能良好
  • ggadjustedcurves survminer if (xi > xj) 1L else -1L 错误

    我正在尝试使用 survminer 通过 ggadjustedcurves 创建调整后的生存曲线 我的代码如下 adjustedcurve lt coxph Surv time DeathTxCensor deadORtx 1 strata
  • 修复协议 Ecto.Queryable 未实现错误

    我刚开始使用 Ecto 和 Elixir 并且遇到了一个无法解释的错误 我的代码看起来就像 Ecto 自述文件中的示例 这是我的 Ecto 模型和查询模块 defmodule Registration do use Ecto Model s
  • 警报对话框肯定按钮问题

    我在单击按钮时启动了警报对话框 它有用户名和密码 在警报对话框触发后 如果您按 确定 按钮 它会强制关闭并关闭应用程序 任何帮助将不胜感激 public class MainActivity extends Activity final C
  • 如何使用 SAX 解析器解析 XML

    我正在关注这个tutorial http www anddev org parsing xml from the net using the saxparser t353 html 它工作得很好 但我希望它返回一个包含所有字符串的数组 而不
  • 如何制作便携式 Jupyter 幻灯片

    如何使 Jupyter 幻灯片放映变得便携 我可以在本地提供幻灯片放映 但我无法将其发送给任何人并让它与所有图像 幻灯片动画功能等一起使用 我在用jupyter nbconver my notebook ipynb to slides并获取
  • IE 6 与位置:固定

    位置 已修复 不适用于 Internet Explorer 6 我无法真正理解在 google 上找到的修复程序 我需要它在 IE6 IE7 IE8 和 FireFox 3 0 中工作
  • 在react-admin中自动完成带有两个字段的输入?

    我正在使用react admin创建一个网站 并使用以下代码创建一个包含id和描述的AutocompleteInput 以便您可以搜索两者并且它会过滤选项 const choices number 102 description Furni
  • iPhone:如何获取iPhone上所有通讯录的名称?

    一些用户的 iPhone 通讯录中有多个地址簿 这是由于他们与例如联系人建立的不同同步连接造成的 交换服务器 如何获得所有这些不同的地址簿 我有兴趣获取保存这些不同地址簿的名称并访问他们的联系信息 谢谢你 ABAddressBookRef
  • 使用 Stripe 的 Apple Pay 将令牌发送到服务器并收取购买费用

    我在用Apple Pay在我的 iPhone 应用程序中与支付提供商Stripe 我使用 test key 实现了 Apple Pay 它返回令牌并获取PKPaymentAuthorizationStatusSuccess在模拟器中 事实上
  • SQL Server 事务表是否应该始终具有代理主键

    对于已经有主键 4列的自然组合键 的大型事务表 1亿行 20GB 添加标识列并将其作为主键是否有助于性能 当前主键 4 列的自然复合主键 可以完成这项工作 但我被告知您应该始终有一个代理键 那么 可以通过创建标识列并将其设为主键来提高性能吗
  • 在一台机器上运行多个版本的.net

    我对 net 的各个版本很好奇 我们有一个开发各种版本 1 1 和 2 0 应用程序的环境 现在 我正在尝试在 3 5 中进行开发 最大的问题是这些版本是否能够在同一 IIS 安装上很好地协同工作 另一个需要注意的是 我正在使用 Visua
  • 如何存根仍然需要从 RSpec 中的数据库加载的对象?

    我想检查一个对象的关联是否收到某个方法调用 问题是我可以存根对象的关联 但是当稍后从数据库加载关联时 加载的对象与我的存根对象不是同一个 物理 对象 它具有相同的 ID 但它不是相同的 物理 对象 因此存根不再起作用 我目前拥有的是 并且这
  • C 中“tail -f”功能的自定义实现

    EDIT 我最后使用了inotify 正如 stefanB 所说 inotify 是最适合使用的东西 我发现了一个尾部克隆 它使用inotify来实现 f模式 inotail http distanz ch inotail 问题原文 我正在