fgets在读取/proc/PID/maps时陷入无限循环
我正在尝试读取fgets在读取/proc/PID/maps时陷入无限循环,c,infinite-loop,fgets,C,Infinite Loop,Fgets,我正在尝试读取/proc//maps文件。Iptrace(ptrace\u ATTACH,)在读取之前(因此,该进程应该被挂起) 读取的代码如下所示: while(fgets(line_buf, BUFSIZ, maps_fd) != NULL){ ... } 但它并没有结束(无限循环)。我做了一个printfline\u buf,结果显示fgets读取了它已经读取的行 问题:什么可能会更改我的地图文件?(如果有任何变化) 如果文件没有被其他内容更改,为什么fgets会读取它已经读取的行?我
/proc//maps
文件。Iptrace(ptrace\u ATTACH,)
在读取之前(因此,该进程应该被挂起)
读取的代码如下所示:
while(fgets(line_buf, BUFSIZ, maps_fd) != NULL){ ... }
但它并没有结束(无限循环)。我做了一个printfline\u buf
,结果显示fgets读取了它已经读取的行
问题:什么可能会更改我的地图文件?(如果有任何变化)
如果文件没有被其他内容更改,为什么fgets会读取它已经读取的行?我现在找不到引用,但在某些内核版本中,这是一个已知的错误/回归。问题几乎可以肯定,您运行的是一个有缺陷的内核,需要用一个缺陷较少的内核来替换它。如果我能找到问题报告的链接,我会添加它。好的,我尝试更新到最新的内核
[alexandernst@stupidbox0s~]$uname-Linux stupidbox 3.16.4-1-ARCH#1 SMP抢占周一10月6日08:22:27 CEST 2014 x86_64 GNU/Linux
,但我还是得到了同样的结果。那只虫子修好了吗?我想是的。它是否只在跟踪时发生?也许您的ptrace
有问题。或者它可能是一个特定于ptrace
的bug。呃,事实上,忘记了,升级后它确实修复了。你能报告你使用的哪个版本坏了吗?这可能会使这个问题对将来找到它的人更有帮助。我当时使用的是3.15.2,更新到了3.16.4,所以这个bug肯定介于这两个版本之间。