- 使用
lseek(fd,0)
然后read(fd,buf)
for/proc/stat
文件而不是重新打开它以获取该文件的更新内容是否安全? - 打开这个文件后的
mmap()
调用究竟做了什么(见下文)?
我遇到的问题是 top 报告的 CPU 使用率太低(软件中断为 10% vs 100%)。strace 表示 top 不会重新打开此文件,而是会重新开始并再次读取它。不知何故,下次从这个文件中读取的内容与我/proc/stat
单独运行 cat for file 时得到的内容不匹配。
此外,如果我同时在循环中运行 top 和 cat /proc/stat
,则 top 开始报告正确的 CPU-Usage。
我发现的另一个区别是 top在打开文件mmap()
后立即使用 call ,而不会这样做。我不确定这是否也与我的问题有关(因为在这里):/proc/stat
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是英特尔Q6600。