![]() |
|
Модераторы: xvr |
![]()
|
|
| konshyn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
Добрый вечер. Не могу разобраться с некоторыми деталями, мягко говоря:)
Есть файловая система procfs. В ней есть файл. Как мне его открыть и прочитать то, что там находится из своего модуля? -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 3 Всего: 16 |
Из ядерного модуля?
|
|||
|
||||
| konshyn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
-------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 1 Всего: 101 |
файл он и есть файл
open(), read() |
|||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 3 Всего: 16 |
По сути -- не надо этого делать.
Информацыя, представленная в /proc -- обычно просто лежыт в известных местах ядра. Ну, или через task_struct достаётся, или через тот модуль, в котором она нужна. Так или иначе вызывать функцыя чтения файлов -- конечно, можно, но в kernelnewbies FAQ описано почему это плохая идея. |
|||
|
||||
| konshyn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
Сейчас я смотрю не с точки зрения хорошо/плохо, а с точки зрения надо. -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
| konshyn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
Таких функций в ядре я не нашел. cat /proc/kallsyms -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
| konshyn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
Зато нашел методы filp_open() и kernel_read().
Добавлено через 3 минуты и 16 секунд Но непонятно. Если open() - системный вызов, т.е. предоставляется ядром, почему я не могу его в ядре использовать? -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 3 Всего: 16 |
Я там ссылку кинул -- в ней написано. Ну, кроме того, что это само по себе в большынстве случаев -- неправильный расход ресурсов. |
|||
|
||||
| konshyn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
В принципе понятно. Когда я использую 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 -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
| tzirechnoy |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 3 Всего: 16 |
Можно прямо сразу так и писать: "ничего не вышло". Если серьёзно -- лезть в код, который эту информацыю выдаёт, и читать откуда он её читает. Ещё можно потребовать, чтобы для работы этой части был userspace-демон, который как раз и будет читать эту информацыю из /proc (или не из /proc |
||||
|
|||||
| konshyn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
Видимо, для начала нужно было описать задачу:) Модуль загружается с параметром. Параметр - это имя файла в /proc. В файле хранится число. Оттуда нужно это чилось прочесть, сделать кое-какие действия и вывести в другой файл в /proc. -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 3 Всего: 16 |
Это точно. Только описанное, скорее всего -- не задача, а ужэ какое-то решэние, в двух местах странное. То есть так-то понятно -- не знаю, реентэрабелен ли код поддержки чтения /proc, если да -- то можно прямо из обработчика дёргать vfs, если нет -- то запускаешь себе процэсс kprocrelayd, и по таймеру перекладываешь себе значение. Но, ещё раз -- она дважды странная. Зачем так делать? Вам мало в ядре херового кода? Или вообще любого кода? По-моему, его там и так в разы большэ, чем хотелось бы! |
|||
|
||||
| konshyn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
Суть не в этом. Когда преподаватель дает задание написать "Hello, world" через классы, то какая разница - правильно и выгодно это или нет. У меня просто тестовое задание такое -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 3 Всего: 16 |
Ну, про попробовать, проверить по коду -- можно ли из обработчика /proc вызывать sys_read я ужэ предложыл. Как и запустить ядерный [procrelayd], который будет это перекладывать (ужэ через filp_open и присный). Но если серьёзно -- то подумай, не найти ли тебе другую работу. Серьёзно, это вполне нормально, если человек любит IOCCC, но если он предлагает тебе писать в таком стиле в качестве тэстового задания -- то это ужэ диагноз. |
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |