相关疑难解决方法(0)

如何从POSIX文件描述符构造c ++ fstream?

我基本上是在寻找fdopen()的C++版本.我对此做了一些研究,这似乎应该是容易的事情之一,但事实证明是非常复杂的.我是否遗漏了这种信念(即它真的很容易)?如果没有,是否有一个好的图书馆在那里处理这个?

编辑:将我的示例解决方案移到单独的答案.

c++ posix fstream file-descriptor

88
推荐指数
5
解决办法
5万
查看次数

C++:使用istream包装vector <char>

我想换一个vector<char>std::istream(所以读完载体将通过完成istream接口)

这样做的方法是什么?

c++

25
推荐指数
3
解决办法
1万
查看次数

从常量内存创建输入流

我在const char*指针指向的缓冲区中有一些数据.数据只是一个ASCII字符串.我知道它的大小.我希望能够以与从流中读取数据相同的方式读取它.我正在寻找一个允许我编写如下代码的解决方案:

// for example, data points to a string "42 3.14 blah"
MemoryStreamWrapper in(data, data_size);
int x;
float y;
std::string w;
in >> x >> y >> w;
Run Code Online (Sandbox Code Playgroud)

重要条件:不得以任何方式复制或更改数据(否则我只使用字符串流.据我所知,不能在不复制数据的情况下从const char指针创建字符串流. )

c++ input stream

23
推荐指数
1
解决办法
1万
查看次数

`basic_streambuf :: setbuf`的效果

我的问题如下:Martin York声称,这个,并且这个答案可以stringstream通过使用basic_stringbuf::pubsetbuf这样的方式从一些内存中读取:

char buffer[] = "123";
istringstream in;
in.rdbuf()->pubsetbuf(buffer, sizeof(buffer)); // calls basic_stringbuf::setbuf
int num;
in >> num; // reads 123
Run Code Online (Sandbox Code Playgroud)

不幸的是,我挖掘了整个标准,无法确定它在哪里工作.我看到的只是实现定义.实际上在微软的实现上(也许在其他人的实现上),这个调用没有任何效果.

以下是我在上一篇C++ 0x草案中找到的相关引文.对于basic_streambuf::setbuf[streambuf.virt.buffer]:

1 效果:以本条款(27.8.1.4,27.9.1.5)中从basic_streambuf派生的每个类别单独定义的方式影响流缓冲.

2 默认行为: 什么都不做.返回此.

但是在派生类中,它似乎保留了行为实现定义.因为basic_stringbuf::setbuf它说[stringbuf.virtuals]:

1 效果: 实现定义,但setbuf(0,0)无效.

因为basic_filebuf::setbuf它说[filebuf.virtuals]:

12 效果:如果setbuf(0,0)[...],则流变为无缓冲.否则结果是实现定义的."无缓冲"[...]

就是这样.所以我看到它,一个有效的实现可以完全忽略这些调用(对于非null参数).

我错了吗?这个标准的正确解释是什么?C++ 98/03/0x有相同的保证吗?您是否有更多关于上述代码的哪些实现以及不适用的实现的统计信息?如何basic_streambuf::setbuf使用?

c++ language-lawyer c++11

16
推荐指数
1
解决办法
1366
查看次数

如何从uint8_t向量创建istream?

我正在添加通过网络获取数据的能力,以便只读取本地文件的代码.我正在使用的网络库以a的形式发送和接收数据vector<uint8_t>.我希望能够在读取文件后重用处理数据的代码,但该代码需要std :: istream,有没有办法让istream读取矢量数据?这是相同的数据,所以我觉得应该有办法,但我无法找到或找出如何做的代码.

当前代码:

    std::ifstream stream("data.img", std::ios::in | std::ios::binary | std::ios::ate);

    if (!stream.is_open())
    {
        throw std::invalid_argument("Could not open file.");
    }
    // the arg for processData is std::istream
    processData(stream);
Run Code Online (Sandbox Code Playgroud)

网络框架:

    vector<uint8_t> data = networkMessage.data;

    // need some way to create istream from data
    std::istream stream = ?

    processData(stream);
    stream.close();
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点,还是我咆哮错误的树?

c++

9
推荐指数
1
解决办法
1623
查看次数

访问一块内存(/ C/C++数组),就好像它是一个文件流一样

有没有办法在C(或C++)中执行此操作?

背景信息:我将逐行读取内存块或大文件,并逐个处理这些行,我懒得两次写同样的东西,一次用于内存块,一次用于文件流.如果需要使用文件流版本,则该文件将不适合内存.可以理解的是,我可以将内存块保存到文件中,然后使用文件流访问相同的数据,但这样会浪费计算机时间.

我知道linux系统上的/ dev/shm.有没有更便携的东西在语言层(C或C++)给我同样的抽象?

c c++ fstream cfstream

4
推荐指数
1
解决办法
863
查看次数

标签 统计

c++ ×6

fstream ×2

c ×1

c++11 ×1

cfstream ×1

file-descriptor ×1

input ×1

language-lawyer ×1

posix ×1

stream ×1