Есть ли способ сделать это в C (или C ++)?
Справочная информация: я буду построчно читать блок памяти или большой файл и обрабатывать эти строки по одному, и мне лень писать одно и то же дважды, один раз для блоков памяти и один раз для потоков файлов , Если необходимо использовать версию файлового потока, файл не помещается в память. Понятно, что я мог сохранить блок памяти в файл, а затем получить доступ к тем же данным с помощью файлового потока, но это кажется пустой тратой компьютерного времени.
Я знаю о / dev / shm в системах Linux. Есть ли что-то более переносимое, что дает мне такую же абстракцию на уровне языка (C или C ++)?
В C вы можете использовать sprintf
а также sscanf
, в C++
Здесь станд :: stringstream класс, который построен с использованием строки. Таким образом, вы можете сделать функцию взять std::istream
в качестве аргумента и передать либо std::ifstream
из std::istringstream
в зависимости от случая.
Вы могли бы использовать функцию open_memstream
(3) и связанные с ней функции, если они доступны в вашей системе. (glibc и POSIX 2008): open_memstream (3) справочная страница,
Вы можете написать свой собственный буфер потока, например, так:
#include <streambuf>
#include <istream>
#include <iomanip>
#include <iostream>
template<
class CharT,
class Traits = std::char_traits<CharT>
> class basic_MemoryBuffer : public std::basic_streambuf<CharT, Traits> {
public:
basic_MemoryBuffer(CharT* ptr, std::size_t size) {
setg(ptr, ptr, ptr+size);
}
};
typedef basic_MemoryBuffer<char> MemoryBuffer;
int main () {
char data[] = "Hello, world\n42\n";
MemoryBuffer m(data, sizeof(data)-1);
std::istream in(&m);
std::string line;
while(std::getline(in, line)) {
std::cout << line << "\n";
}
}