gpt4 book ai didi

linux - 第二次从 Proc-FS 文件读取时使用 lseek() 是否安全

转载 作者:IT王子 更新时间:2023-10-29 00:21:57 27 4
gpt4 key购买 nike

  1. /proc/stat 文件使用 lseek(fd,0) 然后 read(fd,buf) 是否安全下次重新打开它以获取此文件的更新内容?
  2. 打开此文件后 mmap() 调用的真正作用是什么(见下文)?

我遇到的问题是 top 报告 CPU 使用率太低(软件中断为 10% 与 100%)。 strace 工具指示 top 不会重新打开此文件,而是会重新开始并再次读取它。不知何故,下次从该文件中读取的内容与我单独为 /proc/stat 文件运行 cat 时获得的内容不匹配。

此外,如果我同时在循环中运行 top 和 cat /proc/stat,则 top 开始报告正确的 CPU 使用率。

我发现的另一个区别是 top 在打开 /proc/stat 文件后立即使用 mmap() 调用,而 cat 不会那样做。我不确定这是否也与我的问题有关(因为这里是 filesdes=-1):

mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f7b37649000

我正在使用带有 2.6.32-27-server 镜像的 Ubuntu 10.04.1 桌面版。 CPU为Intel Q6600。

最佳答案

你问的很有趣...我开始检查我的机器,但我没有看到 cat/proc/stat 和 execute top 之间的区别。不管怎样,我在工作,并不是完全“有空”进行测试。

您描述“刷新”打开的文件以读取新数据的方式是正确的...如果 [f|l]seek() 调用到文件的末尾然后到文件的开头将更新将读取 EOF 和新数据。

我不认为 mmap() 调用会导致您提到的问题,它可以使读取速度更快,但没有别的(我不是 100% 确定)。

我建议你用 C 语言制作一个小应用程序,打开/proc/stat,阅读它,寻找它并再次阅读它以查看它是如何更新的,如果你要做一些压力测试可能会有用。

现在,回答你真正的问题:

  1. 是的,据我所知,这是肯定的,因为您将“等待”文件中的新数据,这比一直打开和关闭文件要好。

  2. 它将文件映射到进程地址空间,这里有一些信息和示例:

http://www.gnu.org/s/libc/manual/html_node/Memory_002dmapped-I_002fO.htmlhttp://www.linuxquestions.org/questions/programming-9/mmap-tutorial-c-c-511265/

关于linux - 第二次从 Proc-FS 文件读取时使用 lseek() 是否安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4788462/

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