Каков предпочтительный способ чтения небольшого файла, который используется несколькими недолговечными процессами?
getline()
или fread()
с использованием стандартного ввода-вывода POSIX от <stdio.h>
или низкого уровня <unistd.h>
open()
и read()
в достаточно большой буфер (при достаточно агрессивной политике роста); в зависимости от того, как прочитанные данные анализируются / интерпретируются.
Вы не используете отображение памяти для чтения файла один раз; это просто не так эффективно, как read()
/ fread()
, из-за затрат на отображение.
Обратите внимание, что если файл содержит много чисел, фактическим узким местом является преобразование строки в целое и строки в число с плавающей запятой (strtol()
, strtod()
, sscanf()
и т. Д.), Потому что если доступ к файлу достаточно часто останется в кеш страницы Стандартные реализации функций преобразования строк предназначены для корректности, а не для эффективности.
Наша программа уровня ядра вызывает процесс в пользовательском пространстве для принятия некоторых решений на основе значений в файле.
Мне кажется, очень неэффективно. Лично я сохранил бы «файл» в ядре как структуру и предоставил бы только интерфейс пользовательского пространства, возможно, символьное устройство, для изменения его содержимого.
Таким образом, переключение контекста происходит только всякий раз, когда «файл» изменяется процессом пользовательского пространства, а компоненты пространства ядра могут просто проверять содержимое структуры напрямую, в собственном формате, без дополнительных затрат.
Это то, что, например, netfilter (встроенный брандмауэр) и другие существующие вещи делают.