getline() 与 fgets():控制内存分配

2024-05-05

要从文件中读取行,有getline() and fgets()POSIX 函数(忽略可怕的gets())。这是常识getline()优先于fgets()因为它根据需要分配行缓冲区。

我的问题是:这不危险吗?如果有人意外或恶意地创建了一个 100GB 的文件,但没有'\n'字节在里面——这不会让我getline()调用分配大量内存?


我的问题是:这不危险吗?如果是意外或恶意怎么办 意图某人创建一个 100GB 的文件,其中没有 '\n' 字节 – 不会 这使得我的 getline() 调用分配了大量的内存?

是的,您所描述的风险是合理的。然而,

  • 如果程序需要一次将整行加载到内存中,则允许getline()尝试这样做本质上并不比编写自己的代码来执行此操作更具风险fgets(); and
  • 如果您的程序存在此类漏洞,那么您可以通过使用来降低风险setrlimit()限制它可以保留的(虚拟)内存总量。这可以用来导致它失败,而不是成功分配足够的内存来干扰系统的其余部分。

我认为,最好的总体方案是首先编写不需要以整行为单位(一次全部)输入的代码,但这种方法有其自身的复杂性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

getline() 与 fgets():控制内存分配 的相关文章

随机推荐