Безопасно ли использовать lseek () при чтении из файлов Proc-FS второй раз

  1. Безопасно ли использовать lseek (fd, 0) , а затем read (fd, buf) для / proc / stat вместо его повторного открытия, чтобы получить обновленное содержимое этого файла в следующий раз?
  2. И что на самом деле вызывает mmap () после открытия этого файла (см. ниже)?

Проблема, с которой я сталкиваюсь, заключается в том, что top сообщает о слишком низкой загрузке ЦП (10% против 100% для программных прерываний). Строка указывает, что top не открывает этот файл повторно, а вместо этого переходит к началу и снова читает его. И почему-то содержимое, которое читается из этого файла в следующий раз, не совпадает с тем, что я получил бы, когда запустил cat только для файла / proc / stat .

Также, если я запускаю top и cat / proc / stat в цикле одновременно, то top начинает сообщать о правильном использовании ЦП.

Еще одно отличие, которое я заметил, заключается в том, что 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 для настольных ПК с образом сервера 2.6.32-27. Процессор - Intel Q6600.

8
задан wilx 11 November 2014 в 15:29
поделиться