Вопрос

Обман на stackoverflow от одного из моих друзей, у которого та же проблема:

Я скопировал код из этого урока: http://www.thegeekstuff.com/2012/04/create-proc-files/

И сделал модуль, который создал мой файл профиля.

Я был рад обнаружить, что у меня есть файл профиля, в котором я могу отображать «текст» > proc/name_of_procfile.

Я тоже умею читать с кошкой!!

Я дурачился с этим, и теперь в моем файле профиля имеется значительное количество значений - всякий раз, когда я проверяю, он проходит через эти значения последовательно:

Q1.Интересно, как удалить значения из файла профиля?

ТАКЖЕ, позже я попытаюсь добиться такого поведения, при котором всякий раз, когда файл читает мой файл procfile, он меняет значение всего, что он только что прочитал в proc_file.

В2.Я знаю, что это будет реализовано в моем методе «int read_info», но есть ли какие-нибудь указания, как это сделать?

Это было полезно?

Решение

Вопрос 1.

Вы не можете удалить эти значения в обычном смысле операции удаления в файловой системе.Вы можете echo что-то в профиль, если он доступен для записи.Тогда от поведения модуля зависит то, как обрабатываются эти «входящие» данные.Будет ли он храниться или отбрасываться или каким-то образом каким-то образом учитываться внутри — решает модуль.Точнее, логика, которую вы помещаете в модуль, определяет обработку.Модуль из этого примера имеет очень простую логику:он запоминает строку в своем внутреннем буфере, когда ядро ​​вызывает его write_info функция - на самом деле она объединяет новые данные с текущим содержимым.Затем он может вернуть содержимое этого буфера, когда ядро ​​вызывает функцию read_info.Итак, если вы это сделаете:

echo "some text">/proc/yourprocfile
echo "another text">/proc/yourprocfile

Затем cat /proc/yourprocfile напечатал бы

some text
another text

на экране.Обобщить:полное поведение этих файлов module-defined.

В2.

Вы можете сделать это почти так же, как обычно C программа.Есть два основных различия:

  • API, доступный в режиме ядра, отличается.Некоторые функции имеют те же или очень похожие названия и функциональные возможности, что и их аналоги в стандартной версии. C библиотека имеет.Другие функции имеют другие имена, но по-прежнему аналогичны некоторым функциям пользовательского пространства.И затем некоторые специфические функции, доступные только в пространстве ядра.

  • все, что вы делаете в пространстве ядра, должно быть несколько раз проверено вами и отлажено on the sheet of paper так как любая ошибка в вашем модуле может привести как минимум к дампу ядра ядра (ядро просто останавливается, и тогда вам нужно нажать reset кнопку для перезагрузки системы) и в худшем случае может привести к повреждению данных вашей файловой системы.

Итак, я бы порекомендовал вам настроить пакет VirtualBox;создать с помощью этого прекрасного инструмента виртуальную машину;установить туда минимальную версию Linux и сделать снимок ее виртуального диска после установки.Поэтому, если что-то пойдет не так, вы всегда можете возместить ущерб.Вам не нужно устанавливать туда все инструменты сборки и исходный код ядра — вы будете только загружать и тестировать/отлаживать свои модули/приложения на этой виртуальной машине.

Но в любом случае та область, которую вы собираетесь коснуться, или, вернее, уже коснулись, очень интересна.

Удачи

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top