GHC.IO.FD
| Авторское право | (c) The University of Glasgow 1994-2008 |
|---|---|
| Лицензия | см. libraries/base/LICENSE |
| Сопровождающий | libraries@haskell.org |
| Стабильность | внутренний |
| Переносимость | непереносимый |
| Безопасный Haskell | Безопасный |
| Язык | Haskell2010 |
Описание
Низкоуровневые операции чтения/записи для файловых дескрипторов
Конструкторы
| FD | |
Поля
| |
Экземпляры
Аргументы
| :: FilePath | файл для открытия |
| -> IOMode | режим открытия файла |
| -> Bool | открыть файл в неблокирующем режиме? На обычные файлы и блочные устройства это не влияет: они всегда открываются в блокирующем режиме. Подробнее см. |
| -> (FD -> IODeviceType -> IO r) |
|
| -> ((forall x. IO x -> IO x) -> r -> IO s) |
|
| -> IO s |
Открывает файл и создаёт для него FD. Если IOMode имеет значение WriteMode, размер файла обнуляется.
openFileWith принимает два действия — act1 и act2, — которые нужно выполнить после открытия файла.
В act1 передаются файловый дескриптор и тип устройства ввода-вывода для только что открытого файла. Если в act1 возникает исключение, файл будет закрыт. act1 не должно самостоятельно закрывать файл. Если оно это сделает, а затем получит исключение, обработчик исключений попытается закрыть его повторно, что недопустимо.
act2 выполняется с замаскированными асинхронными исключениями. Ему передаются функция для восстановления состояния маскирования и результат act1. Оно /не должно/ выбрасывать исключение (или допускать его доставку прерываемой операцией), предварительно не закрыв файл или не обеспечив его закрытие. act2 может закрыть файл, но не обязано этого делать. Если act2 оставляет файл открытым, он останется открытым после возврата из openFileWith.
Код, вызывающий openFileWith и желающий установить финализатор для закрытия файла, должен сделать это в act2. Если сделать это в act1, финализатор может закрыть файл первым, после чего его попытается закрыть обработчик исключений. Пример такого использования см. в openFile'. В любом случае вызывающий код отвечает за то, чтобы файл был в конечном итоге закрыт, например с помощью bracket.
Аргументы
| :: FilePath | файл для открытия |
| -> IOMode | режим открытия файла |
| -> Bool | открыть файл в неблокирующем режиме? |
| -> IO (FD, IODeviceType) |
Открывает файл и создаёт для него FD. Если IOMode имеет значение WriteMode, размер файла обнуляется. Эту функцию сложно использовать, не рискуя утечкой файлового дескриптора при возникновении исключения. В частности, её необходимо вызывать с замаскированными исключениями, что не очень удобно, поскольку поток будет непрерываемым на время кодирования пути к файлу. Вместо неё используйте openFileWith.
Аргументы
| :: CInt | |
| -> IOMode | |
| -> Maybe (IODeviceType, CDev, CIno) | |
| -> Bool | является сокетом (в Windows) |
| -> Bool | работает в неблокирующем режиме в Unix |
| -> IO (FD, IODeviceType) |
Создаёт FD из существующего файлового дескриптора. Завершает работу с ошибкой, если FD ссылается на каталог. Если FD ссылается на файл, mkFD блокирует файл в соответствии с семантикой блокировок Haskell 2010 «один писатель — несколько читателей» (поэтому нам также нужен аргумент IOMode).
release :: FD -> IO () Источник
setNonBlockingMode :: FD -> Bool -> IO FD Источник
readRawBufferPtr :: String -> FD -> Ptr Word8 -> Int -> CSize -> IO Int Источник
readRawBufferPtrNoBlock :: String -> FD -> Ptr Word8 -> Int -> CSize -> IO Int Источник
writeRawBufferPtr :: String -> FD -> Ptr Word8 -> Int -> CSize -> IO CInt Источник
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/9.14.1/docs/libraries/base-4.22.0.0-66f8/GHC-IO-FD.html