C 使用pread读取文件

C 使用pread读取文件,c,algorithm,C,Algorithm,问题的目的是仅使用pread读取带有整数的文件 我试图设计一个通用的解决方案,在这里我可以读取任意长度的整数,但我认为从我目前的算法中一定有更好的解决方案 为了解释和指导算法,下面是一个示例输入文件。我已明确添加了\r\n,以显示它们存在于文件中 输入文件: 23456\r\n 134\r\n 1\r\n 345678\r\n 算法 1. Read a byte from the file 2. Check if it is number i.e '0' <= byte <= '

问题的目的是仅使用pread读取带有整数的文件

我试图设计一个通用的解决方案,在这里我可以读取任意长度的整数,但我认为从我目前的算法中一定有更好的解决方案

为了解释和指导算法,下面是一个示例输入文件。我已明确添加了
\r\n
,以显示它们存在于文件中

输入文件:

23456\r\n
134\r\n
1\r\n
345678\r\n
算法

1. Read a byte from the file 
2. Check if it is number i.e '0' <= byte <= '9'
3.1 if yes, increment the offset and read the next byte
3.2 if not, is it \r 
3.2.1 if yes, read the next and it should be \n. 
Here the line is finished and we can use strtol to convert string to int.
3.2.2 // Error condition
1。从文件中读取一个字节
2.检查是否为数字,即“0”
是否有更好的方法使用pread()从文件中读取整数,而不是解析每个字节以确定字符串的结尾,然后转换为整数

是的,将大块数据读入内存,然后对内存进行解析。使用大缓冲区(即,取决于系统内存)。在有千兆字节内存可用的现代系统上,您可以选择兆字节范围内的缓冲区。我可能会从一个1或2mega字节的缓冲区开始,看看它的性能如何

这将比逐字节读取更有效率

<>注释:您的代码需要处理文件中的块在整数中间停止的情况。这给代码增加了一点复杂性,但处理起来并不难

在那里我可以读取任意长度的整数


如果你的意思是大于系统中最大整数的整数,那就复杂多了。无法使用标准函数,如
strtol
。此外,您还需要定义自己存储这些值的方式。或者,您可以获取一个可以处理此类值的公共库。

字节不是数字(或者包含0到255之间的字节)。它可以编码一个数字。2021年。StackOverflow不是一个“做我的家庭作业”网站。另见。最后,为了提高效率,您需要执行一些缓冲IO。请在您的问题中提供一些您实际上没有问过的问题。谢谢,我已经更新了描述,以包含明确的问题。@basilestrynkevitch我不是要求做家庭作业。我只是想看看是否有更好的解决方案或方法来解决这种情况。根据我的评论,我很清楚我有一个有效的解决方案,但我想改进,从而寻求集体智慧。这一步:“如果是,增加偏移量并再次读取val”听起来很奇怪。。。如何从另一个偏移量再次读取该值?为什么要读取相同的值两次?你已经有了内存中的值。不,几GB的巨大缓冲区没有帮助。根据经验,兆字节大小的缓冲区在2021年会更好。如果性能与问题有关,请考虑使用和/或@ BaselestalyKevyy,好吧,也许我的措辞不好。事实上我已经更新了答案。