使用mmap在C中逐行读取文件的最佳方法?
以下代码显示了如何使用使用mmap在C中逐行读取文件的最佳方法?,c,mmap,line-by-line,C,Mmap,Line By Line,以下代码显示了如何使用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 -
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");
如果
addr
是char*
,我将如何将结果拆分为行?或者,是否有更好的方法使用mmap
从文本文件中读取行?不清楚您首先为什么要mmap文件。我认为这是为了性能,但除非您通过性能测试确定您的程序运行速度不够快,并且所讨论的文件上的I/O对它来说是一个重大瓶颈,否则这样的步骤将是越狱
尽管如此,如果您决定对文件进行mmap,并且还必须对其执行某种形式的逐行处理,那么识别换行符的备选方案有:
memchr()
函数
也请记住,您可能不想修改数据(如果像您那样使用PROT_READ
映射数据,则无法修改),因此除非将数据复制到单独的缓冲区,否则您不能期望使用字符串终止符替换行终止符。此外,最后一行可能有也可能没有终止符。因此,您需要谨慎使用标准字符串函数