当前位置: 首页 > 面试题库 >

从文件读取零长度

雷逸仙
2023-03-14
问题内容

我有两个过程,其中一个正在写(附加)到文件,另一个正在从文件读取。这两个进程正在同时运行,但无法通信。另一个读取器进程可能在写入器进程完成之前开始。

这种方法有效,但read()通常返回已读取零字节且无错误的信息。它们的零长度读取与非零长度读取之比很高,效率很低。

有没有办法解决?这是在POSIX文件系统上。


问题答案:

没有通信通道,就无法保证在读取正在写入的文件时,防止零字节读取甚至长时间挂起而又不读取任何数据的方法。Linux实现的tail用途inotify是有效创建通信通道并获取有关文件写入活动的信息。

这是一个足够有趣的问题,IBM甚至发布了红皮书,描述了一种能够以大约15
GB /秒的速度进行“后写后写”的实现:

读后写是一些高端客户用来降低延迟并提高性能的技术。后写后写入技术意味着一旦写入器开始写入,读取器将立即落后于读取;这个想法是使写入时间与读取时间重叠。此概念对I
/ O性能较慢的计算机很有用。对于高I / O吞吐量的机器(例如pSeries 690),可能值得考虑首先并行写入整个文件,然后并行读取数据。

可以实现从后写入的多种方式。在Xdd实现的方案中,写者写完一条记录后,将等待读者读该记录,然后写者才能继续。尽管此方案使写入器和读取器保持同步仅相距一条记录,但是在写入器和读取器之间进行锁定和同步需要花费系统时间。

如果一个人不关心读取器落后于写入器多少记录,那么可以实施一种方案,使写入器尽可能快地降低写入速度。在写入一定数量的记录后,编写者可以更新全局变量。然后,读取器可以拉出全局变量以找出必须读取的记录数。

如果没有通信通道,您将不得不继续尝试,可能会sleep()在出现多个零字节read()结果后继续拨打电话或进行类似操作。



 类似资料:
  • 问题内容: 我正在使用AJAX从文本文件中读取。我如何只读取第一行? 问题答案: 此代码应帮助您从远程文本文件中读取:

  • 我正在做一个项目,我需要从文件中读取文本,然后将特定部分存储为变量。 假设我有文本文件示例。txt 我想将第一行指定为: 等等 到目前为止,我有这个。 这段代码将打印文件的内容,这是朝着正确方向迈出的一步,但是如何读取每行内容呢? 因为我真的不想养成在内存中存储整个文件的习惯。 我知道你可以用 和类似的方法,但我只是想了解提取值的方法。

  • 我在从xml文件中读取信息时遇到了一点问题... 传给我的文件有几千行。我只对300-400行感兴趣。当用户完成操作并且要读取的数据可以存储在中时,我不需要将任何数据写回xml。 我只对最内部名称元素的感兴趣(前两个是“098-0031”和“098-0032”)。 这是我的代码: 但是条件从来没有填满...谁能给我解释一下为什么。也许可以向我展示一种简单的方法来将这些值存储在中?提前感谢! 编辑:

  • 问题内容: 有什么办法可以从中读取文件? 我对库或类/代码文件仅在中定义的字符串不感兴趣 问题答案: 是的,您可以使用以下命令提取所有资源文件 脚步 - 要么

  • 问题内容: 我正在尝试使用该模块从python脚本读取json文件。经过一番谷歌搜索后,我发现以下代码: json文件的路径和名称在哪里。我收到以下错误: 问题答案: 该代码用作变量名。它将阴影您导入的模块引用。为变量使用其他名称。 除此之外,代码在接受字符串的同时传递文件对象。 传递文件内容: 或使用接受类似文件的对象。

  • 问题内容: 只是因为一个简单,易于表达的陈述使我的脸上有些错误,所以我有点头疼。 我有一个名为strings.json的json文件,如下所示: 我现在想读取json文件。我发现了以下这些语句,但是不起作用: 控制台上显示的错误是这样的: 已编辑 从更改为 并得到了这个: 问题答案: 该方法(“ load”中没有“ s”)可以直接读取文件: 您正在使用方法,该方法仅用于 字符串 参数。 编辑:新消