Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lections_v2.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
10.99 Mб
Скачать

Функции для работы с элементами фс proc.

  1. create_proc_entry(name, mode, parent);

Создает файл с именем name, режимом mode и указателем на структуру proc_dir_entry parent, в которой появится файл. Обычно mode = 0.

Получим указатель на структуру proc_dir_entry:

//proc/net/test

// для инициализации файла test:

char[] name, test_entry;

test_entry = create_proc_entry("test", 0600, proc_net);

test_entry->nlink = 1;

test_entry->data = (void *)&test_data;

test_entry->read_proc = test_read_proc;

test_entry->write_proc = test_write_proc;

  1. Удаляет файл из proc. Для этого необходим указатель, относительный путь или структура proc_dir_entry.

remove_proc_entry(Name, parent);

  1. Создание директории с именем name в parent, возвращает указатель на proc_dir_entry созданной поддиректории.

  2. proc_mkdir(name, parent);

create_proc_read_entry();

create_proc_read_entry(name, mode, base, get_info);

Создает в proc файл name и регистрирует функцию get_info – метод, который используется для чтения из файла с именем name. Для примера, приведенного выше, указанная функция может использоваться следующим образом:

test_entry = create_proc_read_entry("test", 0600, proc_net, test_get_info);

  1. create_proc_info_entry(name, mode, base, read_proc, data);

Аналогично (4) и дополнительно в proc_dir_entry устанавливает параметр data

test_entry = create_proc_info_entry("test", 0600, proc_net, test_read_proc, &test_data);

  1. struct proc_dir_entry *proc_symlink(const char* name, struct proc_dir_entry *parent, const char* dest);

Создание символической ссылки.

  1. unsigned long copy_to_user(void _user* to, const void* from, unsigned long n);

  2. unsigned long copy_from_user(void _user* to, const void *from, unsigned long n);

Лекция 7. 24.03.2014

Дополнительные функции.

Symlink.

static inline struct proc_dir_entry *proc_symlink(const char *, struct proc_dir_entry *, const char *);

Перемещение данных различных типов с помощью API функций.

copy_to_user(to, from, n);

Проверяет с помощью access_ok() доступен ли указатель пространства пользователя, затем вызывается _copy_to_user(), которая вызывает функцию _copy_from_user_atomic().

Файловая система specfs.

В Linux для работы с внешними устройствами практически не используется.

Только если программист хочет работать с внешними устройствами через streams (подсистема потокового ввода-вывода, в линуксе от нее отказались из-за тяжеловесности и сложности), ее можно отключить.

Терминалы.

Исторически — удаленное устройство, которое подключалось к центральному процессору (к центральной машине).

Серия — то, что описано и документировано таким образом, что можно создать несколько экземпляров.

PDP11 — серийная однопроцессорная машина.

Терминал — совокупность устройства ввода и устройства вывода, удаленно подключенного к центральному процессору (кабельное соединение).

Консоль — балка, закрепленная одним концом.

Поскольку терминал - это устройство, подключенное к ЦП и изначально оно создавалось для ввода-вывода пользователю, отсюда все понятия, связанные с терминалом и терминальным вводом-выводом.

В UNIX и Юникс-подобных системах вход в систему осуществляется через терминальное устройство, которое автоматически реализует семантику терминала. Управление взаимодействием запускаемых с терминала программ осуществляется модулем дисциплины обслуживания линии связи, т. е. некоторым ПО, с помощью которого можно назначать специальные символы терминала и изменять его характеристики.

Вход с терминала в BSD-системах (в Linux реализован аналогично).

Когда мы запускаем систему, система создает несколько терминалов. Терминалы являются процессами и запускаются fork'ом.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]