Моя программа считывает строку из сетевого сокета и записывает его на диск. Поскольку строки могут быть очень длинными, а строки имеют ужасную производительность, я начал использовать ленивые строки байтов. Теперь, похоже, что Haskell будет пройти hClose
на диск дескрипторе файла фактически не топить все байты строку на диск, таким образом:Принудительная оценка lazy IO
- открыть файл для записи
- записи байт строки в файл с
hPut
- закрыть файл
- открыть файл для чтения
обычно приводит к openFile: resource busy (file is locked)
.
Возможно ли выполнить проверку и дождаться записи всей строки байта перед закрытием файла, поэтому я могу быть уверен, что файл фактически закрыт после этой операции?
Вы смотрели на [ 'hFlush'] (http://hackage.haskell.org/packages/archive/base/latest/doc/html/System-IO.html#v:hFlush)? – huon
Промывка не помогает, так как с помощью 'hClose' GHC проходит через нее, не дожидаясь. –