Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

File Descriptor Devices

Boost , ,

File Descriptors

Overview
Acknowledments
Installation
Headers
Reference

Overview

Классы<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>:<

  #include<boost/iostreams/code_converter.hpp>
   #include<boost/iostreams/maped_file.hpp>
   typedefcode_converter<file_descriptor_source>  wfile_descriptor_source;
   typedefcode_converter<file_descriptor_sink>    wfile_descriptor_sink;
>

Acknowledgments

Устройства дескриптора файлов основаны на работе Николая Йосуттиса[Josuttis1]pp.672-3 и[Josuttis2].

Installation

Устройства дескриптора файлов зависят от исходного файла<<libs/iostreams/src/file_descriptor.cpp>>, который использует заголовки Windows или POSIX в зависимости от операционной системы пользователя. Инструкции по установке см.Установка.

Headers

<boost/iostreams/device/file_descriptor.hpp>

Reference

Class file_descriptor_source

Description

МодельSeekableSourceиClosable, обеспечивающая доступ к файлу только для чтения через дескриптор файлов операционной системы.

Synopsis

namespace boost { namespace iostreams {
enum file_descriptor_flags {
    never_close_handle,
    close_handle
};
class file_descriptor_source {
public:
    typedef char                      char_type;
    typedef [implementation-defined]  handle_type;
    typedef [implementation-defined]  category;
    file_descriptor_source();
    template<typename Path>
    file_descriptor_source( const Path& pathname,
                            std::ios_base::open_mode mode = 
                                std::ios_base::in );
    file_descriptor_source( int fd, file_descriptor_flags );
    // Windows-only
    file_descriptor_source( HANDLE hFile, file_descriptor_flags );
    // Deprecated
    file_descriptor_source( int fd, bool close_on_exit = false );
    // Deprecated, Windows-only
    file_descriptor_source( HANDLE hFile, bool close_on_exit = false );
    template<typename Path>
    void open( const Path& pathname,
                     std::ios_base::open_mode mode = 
                         std::ios_base::in );
    void open( int fd, file_descriptor_flags );   
    // Windows-only
    void open( HANDLE hFile, file_descriptor_flags );
    // Deprecated
    void open( int fd, bool close_on_exit = false );   
    // Deprecated, Windows-only
    void open( HANDLE hFile, bool close_on_exit = false );
    bool is_open() const;
    handle_type handle() const;
};
} } // End namespace boost::io

file_descriptor_source::file_descriptor_source

    file_descriptor_source();
    template<typename Path>
    file_descriptor_source( const Path& pathname,
                            std::ios_base::open_mode mode = 
                                std::ios_base::in );
    file_descriptor_source( int fd, file_descriptor_flags );
    // Windows-only
    file_descriptor_source( HANDLE hFile, file_descriptor_flags );
    // Deprecated
    file_descriptor_source( int fd, bool close_on_exit = false );
    // Deprecated, Windows-only
    file_descriptor_source( HANDLE hFile, bool close_on_exit = false );

Первый элемент создает пустое<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>.

file_descriptor_source::open

    template<typename Path>
    void open( const Path& pathname,
                     std::ios_base::open_mode mode = 
                         std::ios_base::in );
    void open( int fd, file_descriptor_flags );
    // Windows-only
    void open( HANDLE hFile, file_descriptor_flags );
    // Deprecated
    void open( int fd, bool close_on_exit = false );
    // Deprecated, Windows-only
    void open( HANDLE hFile, bool close_on_exit = false );

Параметры<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обеспечивает доступ к файлу только для записи через дескриптор файлов операционной системы.

Синопсис

<
namespaceboost {namespaceiostreams {
enumfile_descriptor_flags {
    never_close_handle,
    close_handle
};
classfile_descriptor_sink {
public:
   typedefchar                     char_type;
   typedef[implementation-defined] handle_type;
   typedef[implementation-defined] category;
   file_descriptor_sink();
   template<typenamePath>
   file_descriptor_sink(constPath& pathname,
                          std::ios_base::open_mode mode = 
                              std::ios_base::out );
   file_descriptor_sink(intfd,file_descriptor_flags);
   // Windows-only
   file_descriptor_sink( HANDLE hFile,file_descriptor_flags);
   // Deprecated
   file_descriptor_sink(intfd,boolclose_on_exit =false);
   // Deprecated, Windows-only
   file_descriptor_sink( HANDLE hFile,boolclose_on_exit =false);
   template<typenamePath>
   voidopen(constPath& pathname,
                     std::ios_base::open_mode mode = 
                         std::ios_base::out );
   voidopen(intfd,file_descriptor_flags);   
   // Windows-only
   voidopen( HANDLE hFile,file_descriptor_flags);
   // Deprecated
   voidopen(intfd,boolclose_on_exit =false);   
   // Deprecated, Windows-only
   voidopen( HANDLE hFile,boolclose_on_exit =false);
   boolis_open()const;
    handle_typehandle()const;
};
} }// End namespace boost::io
>

<file_descriptor_sink::file_descriptor_sink>

<
   file_descriptor_sink();
   template<typenamePath>
    file_descriptor_sink(constPath& pathname,
                          std::ios_base::open_mode mode = 
                              std::ios_base::out );
    file_descriptor_sink(intfd,file_descriptor_flags);
   // Windows-only
    file_descriptor_sink( HANDLE hFile,file_descriptor_flags);
   // Deprecated
    file_descriptor_sink(intfd,boolclose_on_exit =false);
   // Deprecated, Windows-only
    file_descriptor_sink( HANDLE hFile,boolclose_on_exit =false);
>

Первый из них — пустой<file_descriptor_sink>.

Второй элемент создает<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>.

file_descriptor_sink::open

    template<typename Path>
    void open( const Path& pathname,
                     std::ios_base::open_mode mode = 
                         std::ios_base::out );
    void open( int fd, file_descriptor_flags );
    // Windows-only
    void open( HANDLE hFile, file_descriptor_flags );
    // Deprecated
    void open( int fd, bool close_on_exit = false );
    // Deprecated, Windows-only
    void open( HANDLE hFile, bool close_on_exit = false );

Параметры<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, обеспечивающая доступ к файлу для чтения и записи через дескриптор файлов операционной системы.

Синопсис

<
namespaceboost {namespaceiostreams {
enumfile_descriptor_flags {
    never_close_handle,
    close_handle
};
classfile_descriptor {
public:
   typedefchar                     char_type;
   typedef[implementation-defined] handle_type;
   typedef[implementation-defined] category;
   file_descriptor();
   template<typenamePath>
   file_descriptor(constPath& pathname,
                     std::ios_base::open_mode mode = 
                         std::ios_base::in | std::ios_base::out );
   file_descriptor(intfd,file_descriptor_flags);
   // Windows-only
   file_descriptor( HANDLE hFile,file_descriptor_flags);
   // Deprecated
   file_descriptor(intfd,boolclose_on_exit =false);   
   // Deprecated, Windows-only
   file_descriptor( HANDLE hFile,boolclose_on_exit =false);
   template<typenamePath>
   voidopen(constPath& pathname,
                     std::ios_base::open_mode mode = 
                         std::ios_base::in | std::ios_base::out );
   voidopen(intfd,file_descriptor_flags);   
   // Windows-only
   voidopen( HANDLE hFile,file_descriptor_flags);
   // Deprecated
   voidopen(intfd,boolclose_on_exit =false);   
   // Deprecated, Windows-only
   voidopen( HANDLE hFile,boolclose_on_exit =false);
   boolis_open()const;
    handle_typehandle()const;
};
} }// End namespace boost::io
>

<file_descriptor::file_descriptor>

<
   file_descriptor();
   template<typenamePath>
    file_descriptor(constPath& pathname,
                     std::ios_base::open_mode mode = 
                         std::ios_base::in | std::ios_base::out );
    file_descriptor(intfd,file_descriptor_flags);
   // Windows-only
    file_descriptor( HANDLE hFile,file_descriptor_flags);
   // Deprecated
    file_descriptor(intfd,boolclose_on_exit =false);
   // Deprecated, Windows-only
    file_descriptor( HANDLE hFile,boolclose_on_exit =false);
>

Первый элемент создает пустоту<file_descriptor>.

Второй элемент создает<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>.

file_descriptor::open

    template<typename Path>
    void open( const Path& pathname,
                     std::ios_base::open_mode mode = 
                         std::ios_base::in | std::ios_base::out );
    void open( int fd, file_descriptor_flags );
    // Windows-only
    void open( HANDLE hFile, file_descriptor_flags );
    // Deprecated
    void open( int fd, bool close_on_exit = false );
    // Deprecated, Windows-only
    void open( HANDLE hFile, bool close_on_exit = false );

Параметры<open>такие же, как у соответствующих конструкторов. Если файл дескриптор уже содержит файл, он будет закрыт (если он не открыт или не построен с<never_close_handle>).

file_descriptor::is_open

    bool is_open() const;

Возвращается<true>, если основной файл был успешно открыт.

file_descriptor::handle

    handle_type handle() const;

Возвращает базовый дескриптор файла ОС. В Windows это<HANDLE>. В других системах это<int>.


[ISO, Таблица 92.


Статья File Descriptor Devices раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 10:38:39/0.0076079368591309/0