我正在使用Linux,文件描述符是此操作系统的主要模型。
我想知道是否有任何库或任何方法从C ++ std::fstream
开始检索本机Linux文件描述符。
我想到了boost::iostream
,因为有一个名为file_descriptor
的类,但我明白它的目的与我想要达到的目的不同。
你知道某种方法吗?
答案 0 :(得分:7)
您可以采用另一种方式:实现自己的包含文件描述符的流缓冲区,然后将其与iostream
而不是fstream
一起使用。使用Boost.Iostreams可以简化任务。
非便携式gcc解决方案是:
#include <ext/stdio_filebuf.h>
{
int fd = ...;
__gnu_cxx::stdio_filebuf<char> fd_file_buf{fd, std::ios_base::out | std::ios_base::binary};
std::ostream fd_stream{&fd_file_buf};
// Write into fd_stream.
// ...
// Flushes the stream and closes fd at scope exit.
}
答案 1 :(得分:4)
没有(标准)方法从std :: fstream中提取文件号,因为标准库没有强制要求如何实现文件流。
相反,如果要执行此操作(使用FILE*
),则需要使用C文件API。
答案 2 :(得分:3)
没有正式的方法来获取文件流的私有文件句柄(或者实际上是std::basic_filebuf
),因为它应该是可移植的并且不鼓励使用特定于平台的函数。
然而,你可以像继承std::basic_filebuf
那样做丑陋的黑客攻击,并试图撬开文件句柄。它不是我推荐的东西,因为它可能会破坏不同版本的C ++库。
答案 3 :(得分:2)
不支持在标准C ++和libstdc++
中公开文件描述符。