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

前端之家收集整理的这篇文章主要介绍了linux – 第二次从Proc-FS文件读取时使用lseek()是否安全前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
>使用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相关文章