可能重复:
从 std::fstream 获取 FILE*
我在 Linux 上工作,文件描述符是这个操作系统的主要模型。
我想知道是否有任何库或任何方法可以从 C++ 检索本机 Linux 文件描述符std::fstream
。
我考虑了一下,boost::iostream
因为有一个类叫做file_descriptor
但我明白它的目的与我想要实现的目的不同。
你知道有什么方法吗?
可能重复:
从 std::fstream 获取 FILE*
我在 Linux 上工作,文件描述符是这个操作系统的主要模型。
我想知道是否有任何库或任何方法可以从 C++ 检索本机 Linux 文件描述符std::fstream
。
我考虑了一下,boost::iostream
因为有一个类叫做file_descriptor
但我明白它的目的与我想要实现的目的不同。
你知道有什么方法吗?
您可以采用另一种方式:实现您自己的包含文件描述符的流缓冲区,然后将其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.
}
没有(标准)方法可以从 std::fstream 中提取文件号,因为标准库没有规定如何实现文件流。
FILE*
相反,如果您想这样做(使用),则需要使用 C 文件 API 。
没有官方方法可以获取文件流(或实际上是 a std::basic_filebuf
)的私有文件句柄,只是因为它应该是可移植的并且不鼓励使用特定于平台的功能。
但是,您可以进行丑陋的 hack,例如继承std::basic_filebuf
,然后尝试撬出文件句柄。这不是我推荐的东西,因为它可能会在不同版本的 C++ 库上中断。
标准 C++ 和libstdc++
.