LINUX.ORG.RU

mmap файла из /proc

 , ,


0

3

Нужно часто читать из /sys/class/block/hda/stat, переоткрывать каждый раз мне кажется не очень правильно. А замапить не получается, lseek после read(); как я понимаю тоже не прокатит, а как правильно?

ps В частном случае наверное есть какой то syscall для чтения в структуру, но хотелось бы универсальный метод для всех недофайлов из /proc, /sys


Ответ на: комментарий от UVV

Если дёргаешь 100500 раз значение из одного файла выходит open() read() close() против lseek() read().

anonymous
()
Ответ на: комментарий от former_anonymous

хмм) у меня отложилось, что не работало, пробовал, но больше 10 лет назад :) сейчас попробовал, работает) ps Но mmap конечно прямее был бы.

simq
() автор топика
Ответ на: комментарий от simq

Можно подумать, что /proc и /sys не в памяти находятся.. давай по-другому спрошу: производительность одного сискола настолько критична, что ты уже упёрся в это? Насколько часто тебе надо читать из /proc /sys? так-то netlink ещё есть..

UVV ★★★★★
()
Ответ на: комментарий от UVV

да не то что бы критично, но думал раз mmap не работает, может что то неправильно делаю или есть какой другой вызов, беглый поиск не подсказал в принципе lseek работает, так что уже просто для красоты будем считать :)

simq
() автор топика

mmap невозможен фундаментально. Содержимое многих файлов в /proc формируется только в момент чтения.

P.S. нет, по page fault-у генерировать — плохая идея.

anonymous
()
Ответ на: комментарий от simq

Но mmap конечно прямее был бы.

Данные в текстовом виде генерируются по запросу. Если реализовать mmap, когда их обновлять? Как синхронизировать обновление? Как ни крути, open()/read() лучше подходит.

Можно ещё сэкономить системные вызовы, используя pread(). Но так ли оно нужно?

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

pread()

Ну вот, теперь только один вызов и остался, в принципе я удовлетворён раз page fault-у механизм тут не задействован. Что то я сам не сообразил

simq
() автор топика
Ответ на: pread() от simq

Ты явно на спичках экономишь. Часто это сколько? Раз в секунду?

Если действительно часто нужно читать, нужно ядро подхачить, чтобы информацию доставать как-то по-другому.

i-rinat ★★★★★
()

А можно написать модуль ядра, который нужную тебе информацию будет предоставлять через ещё один спец. файл, но с поддержкой select()/poll()/epoll().

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от DELIRIUM

Хотелось бы максимально стандартными средствами. И в процессе беседы я понял почему не получится c mmap и попустился до lseek :)

simq
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.