Классы<file_descriptor_source>,<file_descriptor_sink>и<file_descriptor>обеспечивают доступ к файлам через ручки файлов операционной системы или дескрипторы файлов. ЭтиУстройстваведут себя так же, какФайловые обертки<basic_file_source>,<basic_file_sink>и<basic_file>, со следующими важными различиями:
A file descriptor Device may be constructed from a file descriptor which is already open.
The only buffering is provded by the Boost Iostreams library.
There is no automatic line-ending conversion.
Wide-character streams are not supported.
Когда устройство дескриптора файла копируется, результат представляет собой тот же базовый дескриптор файла. Файловый дескрипторне дублируется.
Классы<file_descriptor>поддерживают 64-битные смещение поиска, когда они поддерживаются базовой операционной системой или библиотекой времени выполнения. В настоящее время устройства дескриптора файлов могут не работать в основном с дескрипторами файлов, открытыми в режиме неблокировки.
По желанию можно получить линейное преобразование с использованием класса<newline_filter>. Широкохарактерные версии файлового дескриптора Устройства можно определить следующим образом, используя шаблон<code_converter>:<
Устройства дескриптора файлов основаны на работе Николая Йосуттиса[Josuttis1]pp.672-3 и[Josuttis2].
Installation
Устройства дескриптора файлов зависят от исходного файла<<libs/iostreams/src/file_descriptor.cpp>>, который использует заголовки Windows или POSIX в зависимости от операционной системы пользователя. Инструкции по установке см.Установка.
Первый элемент создает пустое<file_descriptor_source>.
Второй элемент создает<file_descriptor_source>для доступа к файлу с заданным именем пути.<Path>должен быть либо струной, либо подъёмом. Путь файловой системы. Параметр<mode>имеет ту же интерпретацию, что и<(mode | std::ios_base::in)>в<std::basic_filebuf::open>.
Третий участник создает<file_descriptor_source>для доступа к файлу с заданной операционной системой или дескриптором файла библиотеки выполнения. Если второй аргумент<close_handle>, дескриптор файла закрывается, когда<file_descriptor_source>строится — или одна из его копий — закрывается или разрушается.
Четвертый элемент такой же, как и третий, за исключением того, что он принимает ручку файла Windows вместо дескриптора файла. Если второй аргумент<close_handle>, дескриптор файла закрывается, когда<file_descriptor_source>строится — или одна из его копий — закрывается или разрушается.
Устаревшие члены существуют для обеспечения обратной совместимости со старыми версиями. Для того, чтобы их использовать, нужно определить<BOOST_IOSTREAMS_USE_DEPRECATED>. Описатель всегда закрыт<close>, но закрыт только в деструкторах, если<close_on_exit><true>.
Параметры<open>такие же, как у соответствующих конструкторов. Если файл дескриптор уже содержит файл, он будет закрыт (если он не открыт или не построен с<never_close_handle>).
file_descriptor_source::is_open
bool is_open() const;
Возвращается<true>, если основной файл был успешно открыт.
file_descriptor_source::handle
handle_type handle() const;
Возвращает базовый дескриптор файла ОС. В Windows это<HANDLE>. В других системах это<int>.
Class file_descriptor_sink
Description
МодельSeekableSinkиClosableобеспечивает доступ к файлу только для записи через дескриптор файлов операционной системы.
Второй элемент создает<file_descriptor_sink>для доступа к файлу с заданным именем пути.<Path>должен быть либо струной, либо подъёмом. Путь файловой системы. Параметр<mode>имеет ту же интерпретацию, что и<(mode | std::ios_base::out)>в<std::basic_filebuf::open>.
Третий участник создает<file_descriptor_sink>для доступа к файлу с заданной операционной системой или дескриптором файла библиотеки выполнения. Если второй аргумент<close_handle>, дескриптор файла закрывается, когда<file_descriptor_sink>строится — или одна из его копий — закрывается или разрушается.
Четвертый элемент такой же, как и третий, за исключением того, что он принимает ручку файла Windows вместо дескриптора файла. Если второй аргумент<close_handle>, дескриптор файла закрывается, когда<file_descriptor_sink>строится — или одна из его копий — закрывается или разрушается.
Устаревшие члены существуют для обеспечения обратной совместимости со старыми версиями. Для того, чтобы их использовать, нужно определить<BOOST_IOSTREAMS_USE_DEPRECATED>. Описатель всегда закрыт<close>, но закрыт только в деструкторах, если<close_on_exit><true>.
Параметры<open>такие же, как у соответствующих конструкторов. Если файл дескриптор уже содержит файл, он будет закрыт (если он не открыт или не построен с<never_close_handle>).
file_descriptor_sink::is_open
bool is_open() const;
Возвращается<true>, если основной файл был успешно открыт.
file_descriptor_sink::handle
handle_type handle() const;
Возвращает базовый дескриптор файла ОС. В Windows это<HANDLE>. В других системах это<int>.
Class file_descriptor
Description
МодельSeekableDeviceиClosable, обеспечивающая доступ к файлу для чтения и записи через дескриптор файлов операционной системы.
Второй элемент создает<file_descriptor>для доступа к файлу с заданным именем пути.<Path>должен быть либо струной, либо подъёмом. Путь файловой системы. Параметр<mode>имеет ту же интерпретацию, что и в<std::basic_filebuf::open>.
Третий участник создает<file_descriptor>для доступа к файлу с заданной операционной системой или дескриптором файла библиотеки выполнения. Если второй аргумент<close_handle>, дескриптор файла закрывается, когда<file_descriptor>строится — или одна из его копий — закрывается или разрушается.
Четвертый элемент такой же, как и третий, за исключением того, что он принимает ручку файла Windows вместо дескриптора файла. Если второй аргумент<close_handle>, дескриптор файла закрывается, когда новый<file_descriptor>— или одна из его копий — закрыта или уничтожена.
Устаревшие члены существуют для обеспечения обратной совместимости со старыми версиями. Для того, чтобы их использовать, нужно определить<BOOST_IOSTREAMS_USE_DEPRECATED>. Описатель всегда закрыт<close>, но закрыт только в деструкторах, если<close_on_exit><true>.
Параметры<open>такие же, как у соответствующих конструкторов. Если файл дескриптор уже содержит файл, он будет закрыт (если он не открыт или не построен с<never_close_handle>).
file_descriptor::is_open
bool is_open() const;
Возвращается<true>, если основной файл был успешно открыт.
file_descriptor::handle
handle_type handle() const;
Возвращает базовый дескриптор файла ОС. В Windows это<HANDLE>. В других системах это<int>.
Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Статья File Descriptor Devices раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.