大家好,又见面了,我是你们的朋友全栈君。
不幸的是,查看标准没有提供basic_filebuf或任何basic_ [io]?fstream类模板,以允许您提取底层的操作系统文件描述符(以fileno()为C stdio I / O的方式) .
也没有一个open()方法或构造函数将这样的文件描述符作为参数(这将允许您使用不同的机制打开文件并记录文件句柄).
有basic_ostream :: flush(),但是我怀疑这实际上并不调用fsync() – 我期望像stdio中的fflush(),它只确保用户空间运行时库缓冲区被刷新,这意味着操作系统仍然可以缓冲数据.
所以总之,似乎没办法这样做. ?
该怎么办?我的建议是将basic_filebuf< C,T>:
template >
class my_basic_filebuf : public basic_filebuf {
….
public:
int fileno() { … }
….
};
typedef my_basic_filebuf my_filebuf;
要使用它,您可以使用默认构造函数构造一个stream,然后使用rdbuf()分配新的缓冲区:
my_filebuf buf;
buf.open(“somefile.txt”);
ofstream ofs;
ofs.rdbuf(&buf);
ofs << “Writing to somefile.txt…” << endl;
int fd = static_cast(ofs.rdbuf())->fileno();
当然,你也可以从basic_ostream派生一个新的类,使得打开文件的过程和检索其文件描述符更方便.
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/142645.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...