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

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

概述>使用lseek(fd,0)然后读取(fd,buf)/ proc / stat文件而不是重新打开以获取下次此文件的更新内容是否安全? >打开这个文件后mmap()调用了什么(见下文)? 我遇到的问题是顶级报告CPU使用率太低(10%对比软件中断100%). strace表示top不会重新打开此文件,而是lseeks开始并再次读取它.不知何故,下次从这个文件读取的内容与我单独为/ proc / st >使用lseek(fd,0)然后读取(fd,buf)/ proc / stat文件而不是重新打开以获取下次此文件的更新内容是否安全?
>打开这个文件后mmap()调用了什么(见下文)?

我遇到的问题是顶级报告cpu使用率太低(10%对比软件中断100%). strace表示top不会重新打开此文件,而是lseeks开始并再次读取它.不知何故,下次从这个文件读取的内容与我单独为/ 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服务器映像的Ubuntu 10.04.1桌面版. cpu是Intel Q6600.

解决方法 你问的问题非常有趣……我开始检查我的机器,但我没有看到cat / proc / stat和执行top之间的区别.无论如何,我在工作,我不是完全’自由’进行测试.

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

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

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

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

>是的,AFAIK是肯定的,因为你将“等待”文件上的新数据,它应该比打开和关闭文件更好.
>它将文件映射到进程地址空间,以下是一些信息和示例:

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()是否安全全部内容,希望文章能够帮你解决linux – 第二次从Proc-FS文件读取时使用lseek()是否安全所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1039932.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存