- Безопасно ли использовать
lseek(fd,0)
, а затем read(fd,buf)
для /proc/stat
файла вместо его повторного открытия для получения обновленного содержимого этого файла в следующий раз?
- А что на самом деле вызывает
mmap()
после открытия этого файла (см. Ниже)?
Проблема, с которой я сталкиваюсь, заключается в том, что в верхних отчетах слишком низкая загрузка ЦП (10% против 100% для программных прерываний). Strace указывает, что top не открывает этот файл заново, а вместо этого ищет начало и читает его еще раз. И каким-то образом содержимое, которое читается из этого файла в следующий раз, не совпадает с тем, что я получаю, когда запускаю cat только для файла /proc/stat
.
Кроме того, если я одновременно запускаю top и cat /proc/stat
в цикле, top начинает сообщать о правильном использовании CPU.
Еще одно отличие, которое я замечаю, состоит в том, что top использует вызов mmap()
сразу после открытия файла /proc/stat
, тогда как cat
этого не делает. Я не уверен, может ли это также быть связано с моей проблемой (потому что filesdes=-1
здесь):
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f7b37649000
Я использую Ubuntu 10.04.1 Desktop edition с 2.6.32-27-образом сервера. Процессор Intel Q6600.