类 file_descriptor_source
、file_descriptor_sink
和 file_descriptor
通过操作系统文件句柄或文件描述符提供文件访问。这些 设备 的行为与 文件包装器 basic_file_source
、basic_file_sink
和 basic_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
提供对通过操作系统文件描述符的文件的只读访问的 SeekableSource 和 Closable 模型。
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_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
。
file_descriptor_sink
提供对通过操作系统文件描述符的文件的只写访问的 SeekableSink 和 Closable 模型。
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_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
。
file_descriptor
提供对通过操作系统文件描述符的文件的读写访问的 SeekableDevice 和 Closable 模型。
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_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
。
© 版权所有 2008 CodeRage, LLC
© 版权所有 2004-2007 Jonathan Turkanis
根据 Boost 软件许可证版本 1.0 分发。(请参阅随附文件 LICENSE_1_0.txt 或复制到 https://boost.ac.cn/LICENSE_1_0.txt)