标签: io-buffering

105
推荐指数
7
解决办法
28万
查看次数

了解Ruby和OS I/O缓冲

IO缓冲如何在Ruby中工作?使用IOFile类时,数据刷新到底层流的频率是多少?这与OS缓冲相比如何?需要做些什么来保证给定数据写入磁盘,然后自信地将其读回处理?

ruby io operating-system buffering io-buffering

30
推荐指数
1
解决办法
1万
查看次数

如何在Perl中刷新文件?

我有Perl脚本,每隔3秒就会在现有文件中添加一行新内容.此外,还有一个从该文件中读取的C++应用程序.

问题是应用程序在脚本完成并且文件句柄关闭后开始读取文件.为了避免这种情况,我想在每行附加后刷新,但我是Perl的新手,不知道该怎么做.

perl file flush io-buffering

23
推荐指数
3
解决办法
6万
查看次数

Lisp格式和强制输出

我不明白为什么这段代码在不同的实现中表现不同:

(format t "asdf")
(setq var (read))
Run Code Online (Sandbox Code Playgroud)

在CLISP中,它的行为与预期的一样,打印提示后跟读取,但在SBCL中读取,然后输出.我在网上读了一下并改了:

(format t "asdf")
(force-output t)
(setq var (read))
Run Code Online (Sandbox Code Playgroud)

这再次在CLISP中工作正常,但在SBCL中它仍然读取,然后输出.我甚至尝试将它分成另一个函数:

(defun output (string)
   (format t string)
   (force-output t))
(output "asdf")
(setq var (read))
Run Code Online (Sandbox Code Playgroud)

它仍然读取,然后输出.我没有force-output正确使用或者这只是SBCL的特质吗?

format io common-lisp io-buffering

12
推荐指数
1
解决办法
3118
查看次数

如何在Erlang的标准输入上读取字符

我正在尝试编写一个基本的视频游戏,并希望从键盘输入输入.因此,我需要在生成标准输入时读取字符.由于缓冲,io:get_chars,io:fread只有在按下返回键后才会返回.

  1. 是否可以在生成标准输入时访问这些字符?
  2. 我该怎么办?

项目的目的不是制作真实的游戏,它只是学习Erlang的一种方式.因此,性能不是问题.

编辑:这个项目似乎提供了我正在寻找的功能.但是,如果我没有弄错的话,代码的一部分是用C语言编写的,并通过消息传递将字符发送到Erlang部分.对于这种方法,是否存在Erlang原生的替代方案,或者这是唯一可行的方法吗?

erlang io-buffering

5
推荐指数
1
解决办法
515
查看次数

有没有办法找到文件对象的缓冲区大小

我正在尝试“映射”一个非常大的 ascii 文件。基本上,我会读取行,直到找到某个标签,然后我想知道该标签的位置,以便稍后再次查找它以提取相关数据。

from itertools import dropwhile
with open(datafile) as fin:
    ifin = dropwhile(lambda x:not x.startswith('Foo'), fin)
    header = next(ifin)
    position = fin.tell()
Run Code Online (Sandbox Code Playgroud)

现在这tell并没有给我正确的位置。这个问题以前已经以各种形式被问过。原因大概是因为 python 正在缓冲文件对象。所以,python 告诉我它的文件指针在哪里,而不是我的文件指针在哪里。 我不想关闭这个缓冲......这里的性能很重要。然而,如果知道是否有一种方法可以确定 python 选择缓冲多少字节,那就太好了。在我的实际应用程序中,只要我关闭以 开头的行Foo,就没有关系。我可以到处写几行。所以,我实际上计划做的是这样的:

position = fin.tell() - buffer_size(fin)
Run Code Online (Sandbox Code Playgroud)

有什么办法可以找到缓冲区大小吗?

python file io-buffering

5
推荐指数
1
解决办法
3016
查看次数

我可以在"\n"上停止std :: cout刷新吗?

根据这篇文章, std :: cout会在\n连接到交互式设备(例如终端窗口)时自动刷新.否则(例如,当被管道传输到文件时)它将完全缓冲,并且只会刷新.flush()std::endl.

有没有办法在Microsoft Visual C++中覆盖此行为,以便我可以选择是否需要完全缓冲或行缓冲模式?

c++ iostream stdio io-buffering

3
推荐指数
2
解决办法
4282
查看次数