文件描述符

概述
致谢
安装
头文件
参考

概述

file_descriptor_sourcefile_descriptor_sinkfile_descriptor 通过操作系统文件句柄或文件描述符提供文件访问。这些 设备 的行为与 文件包装器 basic_file_sourcebasic_file_sinkbasic_file 非常相似,但存在以下重要区别

复制文件描述符设备时,结果表示相同的基础文件描述符。基础文件描述符不会被复制。

file_descriptor 在底层操作系统或运行时库支持的情况下,支持 64 位查找偏移量。目前,文件描述符设备可能无法与以非阻塞模式打开的文件描述符正确配合使用。

如果需要,可以使用类 newline_filter 提供行结束符转换。可以使用模板 code_converter 定义文件描述符设备的宽字符版本,如下所示

    #include <boost/iostreams/code_converter.hpp>
    #include <boost/iostreams/maped_file.hpp>

    typedef code_converter<file_descriptor_source>  wfile_descriptor_source;
    typedef code_converter<file_descriptor_sink>    wfile_descriptor_sink;

致谢

文件描述符设备基于 Nicolai Josuttis 的工作([Josuttis1] pp. 672-3 和 [Josuttis2])。

安装

文件描述符设备依赖于源文件 <libs/iostreams/src/file_descriptor.cpp>,该文件根据用户的操作系统使用 Windows 或 POSIX 头文件。有关安装说明,请参阅 安装

头文件

<boost/iostreams/device/file_descriptor.hpp>

参考

file_descriptor_source

描述

提供对通过操作系统文件描述符的文件的只读访问的 SeekableSourceClosable 模型。

概要

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 应为字符串或 Boost.Filesystem 路径。参数 mode 的解释与 std::basic_filebuf::open 中的 (mode | std::ios_base::in) 相同。[1]

第三个成员构造一个 file_descriptor_source 以访问具有给定操作系统或运行时库文件描述符的文件。如果第二个参数是 close_handle,则在构造的 file_descriptor_source(或其副本之一)关闭或销毁时,关闭文件描述符。

第四个成员与第三个成员相同,只是它接受 Windows 文件句柄而不是文件描述符。如果第二个参数是 close_handle,则在构造的 file_descriptor_source(或其副本之一)关闭或销毁时,关闭文件描述符。

弃用的成员是为了向后兼容旧版本。要使用它们,您需要定义 BOOST_IOSTREAMS_USE_DEPRECATED。描述符始终由 close 关闭,但仅在 close_on_exittrue 时在析构函数中关闭。

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

file_descriptor_sink

描述

提供对通过操作系统文件描述符的文件的只写访问的 SeekableSinkClosable 模型。

概要

namespace boost { namespace iostreams {

enum file_descriptor_flags {
    never_close_handle,
    close_handle
};

class file_descriptor_sink {
public:
    typedef char                      char_type;
    typedef [implementation-defined]  handle_type;
    typedef [implementation-defined]  category;
    file_descriptor_sink();
    template<typename Path>
    file_descriptor_sink( const Path& pathname,
                          std::ios_base::open_mode mode = 
                              std::ios_base::out );
    file_descriptor_sink( int fd, file_descriptor_flags );

    // Windows-only
    file_descriptor_sink( HANDLE hFile, file_descriptor_flags );

    // Deprecated
    file_descriptor_sink( int fd, bool close_on_exit = false );

    // Deprecated, Windows-only
    file_descriptor_sink( HANDLE hFile, bool close_on_exit = false );

    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 );

    bool is_open() const;

    handle_type handle() const;
};

} } // End namespace boost::io

file_descriptor_sink::file_descriptor_sink

    file_descriptor_sink();
    template<typename Path>
    file_descriptor_sink( const Path& pathname,
                          std::ios_base::open_mode mode = 
                              std::ios_base::out );
    file_descriptor_sink( int fd, file_descriptor_flags );

    // Windows-only
    file_descriptor_sink( HANDLE hFile, file_descriptor_flags );

    // Deprecated
    file_descriptor_sink( int fd, bool close_on_exit = false );

    // Deprecated, Windows-only
    file_descriptor_sink( HANDLE hFile, bool close_on_exit = false );

第一个成员构造一个空的 file_descriptor_sink

第二个成员构造一个 file_descriptor_sink 以访问具有给定路径名的文件。Path 应为字符串或 Boost.Filesystem 路径。参数 mode 的解释与 std::basic_filebuf::open 中的 (mode | std::ios_base::out) 相同。[1]

第三个成员构造一个 file_descriptor_sink 以访问具有给定操作系统或运行时库文件描述符的文件。如果第二个参数是 close_handle,则在构造的 file_descriptor_sink(或其副本之一)关闭或销毁时,关闭文件描述符。

第四个成员与第三个成员相同,只是它接受 Windows 文件句柄而不是文件描述符。如果第二个参数是 close_handle,则在构造的 file_descriptor_sink(或其副本之一)关闭或销毁时,关闭文件描述符。

弃用的成员是为了向后兼容旧版本。要使用它们,您需要定义 BOOST_IOSTREAMS_USE_DEPRECATED。描述符始终由 close 关闭,但仅在 close_on_exittrue 时在析构函数中关闭。

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

file_descriptor

描述

提供对通过操作系统文件描述符的文件的读写访问的 SeekableDeviceClosable 模型。

概要

namespace boost { namespace iostreams {

enum file_descriptor_flags {
    never_close_handle,
    close_handle
};

class file_descriptor {
public:
    typedef char                      char_type;
    typedef [implementation-defined]  handle_type;
    typedef [implementation-defined]  category;
    file_descriptor();
    template<typename Path>
    file_descriptor( const Path& pathname,
                     std::ios_base::open_mode mode = 
                         std::ios_base::in | std::ios_base::out );
    file_descriptor( int fd, file_descriptor_flags );

    // Windows-only
    file_descriptor( HANDLE hFile, file_descriptor_flags );

    // Deprecated
    file_descriptor( int fd, bool close_on_exit = false );   

    // Deprecated, Windows-only
    file_descriptor( 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 | 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 );

    bool is_open() const;

    handle_type handle() const;
};

} } // End namespace boost::io

file_descriptor::file_descriptor

    file_descriptor();
    template<typename Path>
    file_descriptor( const Path& pathname,
                     std::ios_base::open_mode mode = 
                         std::ios_base::in | std::ios_base::out );
    file_descriptor( int fd, file_descriptor_flags );

    // Windows-only
    file_descriptor( HANDLE hFile, file_descriptor_flags );

    // Deprecated
    file_descriptor( int fd, bool close_on_exit = false );

    // Deprecated, Windows-only
    file_descriptor( HANDLE hFile, bool close_on_exit = false );

第一个成员构造一个空的 file_descriptor

第二个成员构造一个 file_descriptor 以访问具有给定路径名的文件。Path 应为字符串或 Boost.Filesystem 路径。参数 mode 的解释与 std::basic_filebuf::open 中相同。[1]

第三个成员构造一个 file_descriptor 以访问具有给定操作系统或运行时库文件描述符的文件。如果第二个参数是 close_handle,则在构造的 file_descriptor(或其副本之一)关闭或销毁时,关闭文件描述符。

第四个成员与第三个成员相同,只是它接受 Windows 文件句柄而不是文件描述符。如果第二个参数是 close_handle,则在新的 file_descriptor(或其副本之一)关闭或销毁时,关闭文件描述符。

弃用的成员是为了向后兼容旧版本。要使用它们,您需要定义 BOOST_IOSTREAMS_USE_DEPRECATED。描述符始终由 close 关闭,但仅在 close_on_exittrue 时在析构函数中关闭。

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


[1][ISO],表 92。