热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何获取FILE标识的流对象?

如何解决《如何获取FILE标识的流对象?》经验,为你挑选了1个好方法。

文档说明FILE是标识流的对象类型.那么,是否可以将流对象与FILE?相关联?

例如,我想std::coutstdout FILE指针或std::cerrstderr等处获取对象.更一般地说,我想编写一个重定向给定流并将自定义设置streambuf为它的函数,如下所示:

void redirect(FILE* file, std::ios stream) {
    freopen_s((FILE**)file, "CONOUT$", "w", file);
    stream.rdbuf(customBuffer);
}

用于重定向流

redirect(stdout, std::cout);
redirect(stderr, std::cerr);

有两个参数似乎是多余的,因为两个参数总是相互关联.



1> Serge Balles..:

C++标准库包括C标准库.A FILE是C流,与C++ iostream完全不同.std::stream实现可能依赖于底层FILE,但标准并不要求这样做,即使在这种情况下也无法检索它.

可能的是构建一个std::streambuf显式使用底层的自定义FILE *,并在一个中使用它std::stream.std::basic_streambuf是C++标准库中为数不多的几个类之一,它被明确地设计为自定义派生的基类.不幸的是我找不到它的教程,但是这个类包含了一些你必须覆盖的虚拟方法.这不是一条简单的道路,但是如果你被卡在某个地方,可能会有一些工作,繁重的测试以及最终的SO帮助.但完全实施远远超出了答案.

TL/DR:没有底层std::stream关联,FILE但有一些工作你可以构建一个stream_buffer将使用底层的自定义FILE *.虽然那些是相当先进的操作......


推荐阅读
author-avatar
倾城不了倾了你
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有