Spec-Zone.ru › Haskell 9

GHC.IO.FD

Авторское право (c) The University of Glasgow 1994-2008
Лицензия см. libraries/base/LICENSE
Сопровождающий libraries@haskell.org
Стабильность внутренний
Переносимость непереносимый
Безопасный Haskell Безопасный
Язык Haskell2010

Описание

Низкоуровневые операции чтения/записи для файловых дескрипторов

data FD Источник

Конструкторы

FD

Поля

  • fdFD :: !CInt
  • fdIsNonBlocking :: !Int

    В Unix нам нужно знать, установлен ли для этого FD флаг O_NONBLOCK. Если установлен, мы можем использовать более эффективные процедуры (а именно, небезопасный FFI) для чтения/записи. В противном случае используется безопасный FFI.

    В настоящее время O_NONBLOCK никак не влияет на обычные файлы и блочные устройства, поэтому для них этот флаг должен быть выключен. Хотя чтение из файла не может блокироваться бесконечно (в отличие от чтения из сокета или канала), оно может на «короткое» время заблокировать всю среду выполнения: нельзя без задержки прочитать файл с дискеты или сетевого ресурса.

Экземпляры
Подробности экземпляров
BufferedIO FD Источник

Начиная с: base-4.1.0.0

Подробности экземпляра

Определён в GHC.Internal.IO.FD

Методы

newBuffer :: FD -> BufferState -> IO (Buffer Word8) Источник

fillReadBuffer :: FD -> Buffer Word8 -> IO (Int, Buffer Word8) Источник

fillReadBuffer0 :: FD -> Buffer Word8 -> IO (Maybe Int, Buffer Word8) Источник

emptyWriteBuffer :: FD -> Buffer Word8 -> IO (Buffer Word8) Источник

flushWriteBuffer :: FD -> Buffer Word8 -> IO (Buffer Word8) Источник

flushWriteBuffer0 :: FD -> Buffer Word8 -> IO (Int, Buffer Word8) Источник

IODevice FD Источник

Начиная с: base-4.1.0.0

Подробности экземпляра

Определён в GHC.Internal.IO.FD

Методы

ready :: FD -> Bool -> Int -> IO Bool Источник

close :: FD -> IO () Источник

isTerminal :: FD -> IO Bool Источник

isSeekable :: FD -> IO Bool Источник

seek :: FD -> SeekMode -> Integer -> IO Integer Источник

tell :: FD -> IO Integer Источник

getSize :: FD -> IO Integer Источник

setSize :: FD -> Integer -> IO () Источник

setEcho :: FD -> Bool -> IO () Источник

getEcho :: FD -> IO Bool Источник

setRaw :: FD -> Bool -> IO () Источник

devType :: FD -> IO IODeviceType Источник

dup :: FD -> IO FD Источник

dup2 :: FD -> FD -> IO FD Источник

RawIO FD Источник

Начиная с: base-4.1.0.0

Подробности экземпляра

Определён в GHC.Internal.IO.FD

Методы

read :: FD -> Ptr Word8 -> Word64 -> Int -> IO Int Источник

readNonBlocking :: FD -> Ptr Word8 -> Word64 -> Int -> IO (Maybe Int) Источник

write :: FD -> Ptr Word8 -> Word64 -> Int -> IO () Источник

writeNonBlocking :: FD -> Ptr Word8 -> Word64 -> Int -> IO Int Источник

Show FD Источник

Начиная с: base-4.1.0.0

Подробности экземпляра

Определён в GHC.Internal.IO.FD

Методы

showsPrec :: Int -> FD -> ShowS Источник

show :: FD -> String Источник

showList :: [FD] -> ShowS Источник

openFileWith Источник

Аргументы

:: FilePath

файл для открытия

-> IOMode

режим открытия файла

-> Bool

открыть файл в неблокирующем режиме? На обычные файлы и блочные устройства это не влияет: они всегда открываются в блокирующем режиме. Подробнее см. fdIsNonBlocking.

-> (FD -> IODeviceType -> IO r)

act1: действие, выполняемое над файловым дескриптором с восстановленным состоянием маскирования и обработчиком исключений, закрывающим файл при возникновении исключения.

-> ((forall x. IO x -> IO x) -> r -> IO s)

act2: действие, выполняемое с замаскированными асинхронными исключениями и без обработчика исключений.

-> IO s

Открывает файл и создаёт для него FD. Если IOMode имеет значение WriteMode, размер файла обнуляется.

openFileWith принимает два действия — act1 и act2, — которые нужно выполнить после открытия файла.

В act1 передаются файловый дескриптор и тип устройства ввода-вывода для только что открытого файла. Если в act1 возникает исключение, файл будет закрыт. act1 не должно самостоятельно закрывать файл. Если оно это сделает, а затем получит исключение, обработчик исключений попытается закрыть его повторно, что недопустимо.

act2 выполняется с замаскированными асинхронными исключениями. Ему передаются функция для восстановления состояния маскирования и результат act1. Оно /не должно/ выбрасывать исключение (или допускать его доставку прерываемой операцией), предварительно не закрыв файл или не обеспечив его закрытие. act2 может закрыть файл, но не обязано этого делать. Если act2 оставляет файл открытым, он останется открытым после возврата из openFileWith.

Код, вызывающий openFileWith и желающий установить финализатор для закрытия файла, должен сделать это в act2. Если сделать это в act1, финализатор может закрыть файл первым, после чего его попытается закрыть обработчик исключений. Пример такого использования см. в openFile'. В любом случае вызывающий код отвечает за то, чтобы файл был в конечном итоге закрыт, например с помощью bracket.

openFile Источник

Аргументы

:: FilePath

файл для открытия

-> IOMode

режим открытия файла

-> Bool

открыть файл в неблокирующем режиме?

-> IO (FD, IODeviceType)

Открывает файл и создаёт для него FD. Если IOMode имеет значение WriteMode, размер файла обнуляется. Эту функцию сложно использовать, не рискуя утечкой файлового дескриптора при возникновении исключения. В частности, её необходимо вызывать с замаскированными исключениями, что не очень удобно, поскольку поток будет непрерываемым на время кодирования пути к файлу. Вместо неё используйте openFileWith.

mkFD Источник

Аргументы

:: 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 Источник

stdin :: FD Источник

stdout :: FD Источник

stderr :: FD Источник

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API