Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> procfs чтение и запись 
:(
    Опции темы
konshyn
Дата 19.1.2015, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Добрый вечер. Не могу разобраться с некоторыми деталями, мягко говоря:)

Есть файловая система procfs. В ней есть файл. Как мне его открыть и прочитать то, что там находится из своего модуля?


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
tzirechnoy
Дата 19.1.2015, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



Из ядерного модуля?
PM MAIL   Вверх
konshyn
Дата 20.1.2015, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Цитата(tzirechnoy @  19.1.2015,  23:10 Найти цитируемый пост)
Из ядерного модуля? 

Да


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
baldina
Дата 20.1.2015, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 1
Всего: 101



файл он и есть файл
open(), read()
PM MAIL   Вверх
tzirechnoy
Дата 20.1.2015, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



По сути -- не надо этого делать.

Информацыя, представленная в /proc -- обычно просто лежыт в известных местах ядра. Ну, или через task_struct достаётся, или через тот модуль, в котором она нужна.

Так или иначе вызывать функцыя чтения файлов -- конечно, можно, но в kernelnewbies FAQ описано почему это плохая идея.
PM MAIL   Вверх
konshyn
Дата 20.1.2015, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Цитата(tzirechnoy @  20.1.2015,  18:37 Найти цитируемый пост)
По сути -- не надо этого делать.

Сейчас я смотрю не с точки зрения хорошо/плохо, а с точки зрения надо.


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
konshyn
Дата 20.1.2015, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Цитата(baldina @  20.1.2015,  12:24 Найти цитируемый пост)
файл он и есть файл
open(), read() 

Таких функций в ядре я не нашел.
cat /proc/kallsyms


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
konshyn
Дата 20.1.2015, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Зато нашел методы filp_open() и kernel_read().

Добавлено через 3 минуты и 16 секунд
Но непонятно. Если open() - системный вызов, т.е. предоставляется ядром, почему я не могу его в ядре использовать?


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
tzirechnoy
Дата 20.1.2015, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



Цитата
 Если open() - системный вызов, т.е. предоставляется ядром, почему я не могу его в ядре использовать?


Я там ссылку кинул -- в ней написано.

Ну, кроме того, что это само по себе в большынстве случаев -- неправильный расход ресурсов.
PM MAIL   Вверх
konshyn
Дата 20.1.2015, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Цитата(tzirechnoy @  20.1.2015,  19:47 Найти цитируемый пост)
-- в ней написано.

В принципе понятно.
Когда я использую filp_open(), то я получаю указатель на структуру struct file (определение я так и не нашел, может кто знает?), когда обычный системный вызов open() возвращает дескриптор. 


tzirechnoy, тогда как рекомендуешь достать информацию из файла /proc/example? В файле только одно целое число

Добавлено через 3 минуты и 40 секунд
P.S. struct file объявление находится в файле include/linux/file.h, а вот в каком месте определение не могу найти

Добавлено через 5 минут и 35 секунд
P.P.S. Возможно, это и неважно, какие поля в struct file, я просто надеялся, что мне это подскажет, где найти правильный способ достать информацию из файла в /proc


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
tzirechnoy
Дата 21.1.2015, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



Цитата
тогда как рекомендуешь достать информацию из файла /proc/example?


Код
0_ilan@azor /tmp%cat /proc/example
cat: /proc/example: Нет такого файла или каталога


Можно прямо сразу так и писать: "ничего не вышло".

Если серьёзно -- лезть в код, который эту информацыю выдаёт, и читать откуда он её читает.

Ещё можно потребовать, чтобы для работы этой части был userspace-демон, который как раз и будет читать эту информацыю из /proc (или не из /proc smile) и писать в твой модуль, через тот жэ /sysfs или ioctl().
PM MAIL   Вверх
konshyn
Дата 21.1.2015, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Цитата(tzirechnoy @  21.1.2015,  12:25 Найти цитируемый пост)
Ещё можно потребовать, чтобы для работы этой части был userspace-демон, который как раз и будет читать эту информацыю из /proc (или не из /proc smile) и писать в твой модуль, через тот жэ /sysfs или ioctl(). 

Видимо, для начала нужно было описать задачу:)

Модуль загружается с параметром. Параметр - это имя файла в /proc. В файле хранится число. Оттуда нужно это чилось прочесть, сделать кое-какие действия и вывести в другой файл в /proc.




--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
tzirechnoy
Дата 21.1.2015, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



Цитата
Видимо, для начала нужно было описать задачу:)


Это точно. Только описанное, скорее всего -- не задача, а ужэ какое-то решэние, в двух местах странное.

То есть так-то понятно -- не знаю, реентэрабелен ли код поддержки чтения /proc, если да -- то можно прямо из обработчика дёргать vfs, если нет -- то запускаешь себе процэсс kprocrelayd, и по таймеру перекладываешь себе значение.

Но, ещё раз -- она дважды странная. Зачем так делать? Вам мало в ядре херового кода? Или вообще любого кода? По-моему, его там и так в разы большэ, чем хотелось бы!
PM MAIL   Вверх
konshyn
Дата 21.1.2015, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Цитата(tzirechnoy @  21.1.2015,  13:34 Найти цитируемый пост)
Но, ещё раз -- она дважды странная. Зачем так делать? Вам мало в ядре херового кода? Или вообще любого кода? По-моему, его там и так в разы большэ, чем хотелось бы! 

Суть не в этом. Когда преподаватель дает задание написать "Hello, world" через классы, то какая разница - правильно и выгодно это или нет.
У меня просто тестовое задание такое


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
tzirechnoy
Дата 21.1.2015, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



Цитата
У меня просто тестовое задание такое



Ну, про попробовать, проверить по коду -- можно ли из обработчика /proc вызывать sys_read я ужэ предложыл. Как и запустить ядерный [procrelayd], который будет это перекладывать (ужэ через filp_open и присный).


Но если серьёзно -- то подумай, не найти ли тебе другую работу. Серьёзно, это вполне нормально, если человек любит IOCCC, но если он предлагает тебе писать в таком стиле в качестве тэстового задания -- то это ужэ диагноз.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0534 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.