我在ghci中加载了一个文件,其中包含以下内容:
h <- openFile "somefile.txt" ReadMode
hSetBuffering h NoBuffering
然后我在文本编辑器中修改并保存了somefile.txt。当我在ghci中多次调用hGetChar时,我会收到该文件的旧字符(就像我打开它时整个文件被缓冲一样)。我希望调用hGetChar来返回修改后的内容。为什么不是这样?
修改 在上述情况下没有显示修改内容的原因确实是因为文本编辑器。当使用cat命令( cat&gt; somefile.txt )时,将返回修改后的文件内容。
然而,它似乎仍然在做缓冲。说文件内容如下:
ABCDEFGHI
123456789
如果我运行hGetChar,我会按预期得到'A'。
现在,如果我使用cat( cat&gt; somefile.txt )将内容更改为以下内容,并再次运行hGetChar,我会期待'Z'但它返回'B':< / p>
AZZZZZZZZ
答案 0 :(得分:1)
BufferMode
仅在写入句柄时有用,而不是在读取时。
来自GHC.IO.Handle.Types中的[note Buffered Reading]
:
Note that the buffering mode (haBufferMode) makes no difference when
reading data into a Handle. When reading, we can always just read all
the data there is available without blocking, decode it into the Char
buffer, and then provide it immediately to the caller.
输入BufferMode的文档似乎已过时。