gpt4 book ai didi

c - 使用 mmap 在 C 中逐行读取文件的最佳方法?

转载 作者:行者123 更新时间:2023-11-30 18:52:02 25 4
gpt4 key购买 nike

以下代码演示了如何使用 mmap 读取文件的一部分命令:

       addr = mmap(NULL, length + offset - pa_offset, PROT_READ,
MAP_PRIVATE, fd, pa_offset);
if (addr == MAP_FAILED)
handle_error("mmap");

s = write(STDOUT_FILENO, addr + offset - pa_offset, length);
if (s != length) {
if (s == -1)
handle_error("write");

如果addrchar* ,我如何将结果分成几行?或者是否有更好的方法使用 mmap 从文本文件中读取行?

最佳答案

目前还不清楚为什么要映射该文件。我想这是为了性能,但除非您通过性能测试确定您的程序运行速度不够快,并且相关文件上的 I/O 是它的一个重要瓶颈,否则这样的这一步就是操之过急。

但是,如果您决定对文件进行 mmap,并且还必须对其执行某种形式的逐行处理,那么识别换行符的替代方法是:

  1. 检查字节以查看哪些是行终止符。

详细信息取决于您想要做什么。如果您可以在扫描数据时测试换行符,那么您的效率会更高,但如果有必要,您可以在当前处理位置之前扫描以找到下一行终止符,以便提前知道它在哪里。您可以将其编写为一个简单的循环,或者您可能会发现使用 memchr() 函数很方便。

还要记住,您可能不想修改数据(如果您像您一样使用 PROT_READ 映射它,则不能修改数据),因此您不能期望用字符串终止符替换行终止符,除非将数据复制到单独的缓冲区。另外,最后一行可能有也可能没有终止符。因此,您需要谨慎使用标准字符串函数。

关于c - 使用 mmap 在 C 中逐行读取文件的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35373281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com