使用mmap按行读取文件

4

我有一个程序需要逐行读取文件,但文件大小不固定,我想使用mmap,但如何使用它来逐行读取文件呢?

谢谢您的答复!


你是在使用C或者C++编程吗? - David Schwartz
1
你使用了C++和C这些标签。你想要哪一个语言的答案?它们是不同的编程语言。 - Brian Campbell
抱歉,我正在使用C++进行编程。 - Arkerone
1个回答

7

一旦你使用mmap()映射了文件,你可以将文件提供给适当的流缓冲区来读取现有内存中的数据,然后使用std::getline()函数:

#include <streambuf>
#include <string>
#include <istream>

struct membuf
    std::streambuf {
    membuf(char* start, size_t size) {
        this->setg(start, start, start + size);
    }
};

int main() {
    // mmap() the file yielding start and size
    membuf      sbuf(start, size);
    std:istream in(&sbuf);
    for (std::string line; std::getline(in, line); ) {
        ...
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接