Вопрос
Обман на 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 и сделать снимок ее виртуального диска после установки.Поэтому, если что-то пойдет не так, вы всегда можете возместить ущерб.Вам не нужно устанавливать туда все инструменты сборки и исходный код ядра — вы будете только загружать и тестировать/отлаживать свои модули/приложения на этой виртуальной машине.
Но в любом случае та область, которую вы собираетесь коснуться, или, вернее, уже коснулись, очень интересна.
Удачи