Разработка ядра Linux - [169]
>mode имеет тип >mode_t и указывает права доступа к файлу на файловой системе sysfs. Если атрибут предназначен для чтения всеми, то флаг прав доступа должен быть установлен в значение >S_IRUGO, если атрибут имеет право на чтение только для владельца, то права доступа устанавливаются в значение >S_IRUSR. Атрибуты с правом на запись, скорее всего, будут иметь права доступа >S_IRUGO | S_IWUSR. Все файлы и каталоги на файловой системе sysfs принадлежат пользователю с идентификаторами пользователя и группы равными нулю.Структура >attribute используется для представления атрибутов, а структура >sysfs_ops описывает, как эти атрибуты использовать. Поле >sysfs_ops — это указатель на одноименную структуру, которая определена в файле > следующим образом.
>struct sysfs_ops {
> /* метод вызывается при чтении файла на файловой системе sysfs */
> ssize_t (*show)(struct kobject *kobj,
> struct attribute *attr, char *buffer);
> /* метод вызывается при записи файла на файловой системе sysfs */
> ssize_t (*store)(struct kobject *kobj,
> struct attribute *attr, const char *buffer, size_t size);
>};
Метод >show() вызывается при чтении файла. Он должен выполнить копирование значения атрибута, который передается в качестве параметра >attr, в буфер, на который указывает параметр >buffer. Размер буфера равен >PAGE_SIZE байт. Для аппаратной платформы значение >PAGE_SIZE равно 4096 байтов. Функция должна возвратить количество байтов данных, которые записаны в буфер в случае успешного завершения, и отрицательный код ошибки, если такая ошибка возникает.
Метод >store() вызывается при записи. Он должен скопировать >size байт данных из буфера >buffer в атрибут >attr. Размер буфера всегда равен >PAGE_SIZE или меньше. Функция должна возвратить количество байтов данных, которые прочитаны из буфера при успешном выполнении, и отрицательный код ошибки в случае неудачного завершения.
Так как этот набор функций должен выполнять операции ввода-вывода для всех атрибутов, то необходимо выполнить некоторые дополнительные действия, чтобы вызвать обработчик, специфичный для каждого атрибута.
Обычно атрибутов, которые используются по умолчанию и предоставляются типом >ktype, связанным с объектом >kobject, оказывается достаточно. Действительно, все объекты >kobject одного типа должны быть чём-то похожи друг на друга или даже быть идентичными по своей природе. Например, для всех разделов жестких дисков один и тот же набор атрибутов должен подходить для всех объектов >kobject. Это не просто упрощает жизнь, но и позволяет упорядочить код и получить одинаковый способ доступа ко всем каталогам файловой системы sysfs, связанным с родственными объектами.
Тем не менее иногда требуется, чтобы определенный экземпляр объекта >kobject имел некоторые специфические свойства. Для таких объектов может оказаться желательным (или необходимым) создать атрибут, которого нет у общего типа данного объекта. Для такого случая ядро предоставляет функцию >sysfs_create_file() для добавления атрибута к существующему объекту.
>int sysfs_create_file(struct kobject *kobj, const struct attribute *attr);
Эта функция позволяет привязать структуру attribute, на которую указывает параметр >attr, к объекту >kobject, на который указывает параметр >kobj. Перед тем как вызвать эту функцию, необходимо установить значение атрибута (заполнить поля структуры). Эта функция возвращает значение нуль в случае успеха и отрицательное значение в случае ошибки.
Обратите внимание, что для обработки указанного атрибута используется структура >sysfs_ops, соответствующая типу >ktype объекта. Иными словами, существующие функции >show() и >store(), которые используются для объекта по умолчанию, должны иметь возможность обработать вновь созданный атрибут.
Кроме того, существует возможность создавать символьные ссылки. Создать символьную ссылку на файловой системе sysfs можно с помощью вызова следующей функции.
>int sysfs_create_link(struct kobject *kobj,
> struct kobject *target, char *name);
Эта функция создает символьную ссылку с именем >name в каталоге объекта, соответствующего параметру >kobj, на каталог, соответствующий параметру >target. Эта функция возвращает нулевое значение в случае успеха и отрицательный код ошибки в противном случае.
Удаляется атрибут с помощью вызова функции >sysfs_remove_file().
>void sysfs_remove_file(struct kobject *kobj,
> const struct attribute *attr);
После возврата из этой функции указанный атрибут больше не отображается в каталоге объекта.
Символьная ссылка, созданная с помощью функции >sysfs_create_link(), может быть удалена с помощью функции >sysfs_remove_link().
>void sysfs_remove_link(struct kobject *kobj, char *name);
После возврата из функции символьная ссылка с именем name удаляется из каталога, на который отображается объект >kobj.
Все эти четыре функции объявлены в файле >. Функции >sysfs_create_file() и >sysfs_remove_file() определены в файле >fs/sysfs/file.c, а функции >sysfs_create_link() и >sysfs_remove_link() — в файле >fs/sysfs/symlink.c.
Сценарии командной оболочки помогают системным администраторам и программистам автоматизировать рутинные задачи с тех самых пор, как появились первые компьютеры. С момента выхода первого издания этой книги в 2004 году многое изменилось, однако командная оболочка bash только упрочила свои лидирующие позиции. Поэтому умение использовать все ее возможности становится насущной необходимостью для системных администраторов, инженеров и энтузиастов. В этой книге описываются типичные проблемы, с которыми можно столкнуться, например, при сборке программного обеспечения или координации действий других программ.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Если вы читаете эту книгу, значит вы подумываете о том, как бы поставить и попробовать Ubuntu. Наверняка, вы не захотите сразу отказываться от Windows и поставите Ubuntu, как вторую ОС (операционную систему).Возможно, вы как и я долго метались от дистрибутива к дистрибутиву и решали, какой же установить. Уверяю вас, вы сделали правильный выбор. Данная книга проведёт небольшую, но базовую экскурсию на тему установки и настройки.Я уверен, что вы найдёте эту книгу интересной для себя. Если у вас возникают какие-либо вопросы, я могу осветить их в новой версии этой книги.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Все началось с того, что студенту захотелось написать собственную программу эмуляции терминала. Потом он принялся развивать и дополнять ее и вдруг заметил, что у него получилась операционная система. Линус назвал ее Linux и поместил в Интернете, призвав желающих вносить в систему изменения. И программисты всех стран, объединившись, стали над ней трудиться.«Just for fun» – смесь автобиографии с рассуждениями о технологиях и путях их развития. Для читателей, неискушенных в программировании, Торвальдс разворачивает увлекательную историю своей жизни.
n1`Глава 2 из отчета Фонда Новая экономика Министерству экономического развития и торговли по теме «Анализ результатов и разработка предложений по созданию механизмов поддержки (в том числе за счет средств федерального бюджета) проектов по использованию ИКТ в экономике, социальной сфере, государственном управлении на региональном и муниципальном уровнях власти». Работа выполнена в рамках ФЦП «Электронная Россия». Дается очерк перспектив модели коммерческого программного обеспечения, известной как свободное программное обеспечение (СПО), в части удовлетворения потребности государственных органов и организаций в компьютерных программах, в сравнении с альтернативной (несвободной) моделью.