Linux - статьи


Глава 8. Блокировка процессов - часть 5


/* * Операции над индексной записью нашего файла. Необходима * для того, чтобы указать местоположение структуры * file_operations нашего файла, а так же, чтобы задать * функцию определения прав доступа к файлу. Здесь можно указать адреса * других функций-обработчиков, но нас они не интересуют. */ static struct inode_operations Inode_Ops_4_Our_Proc_File = { .permission = module_permission, /* check for permissions */ };

/* * Начальная и конечная функции модуля */

/* * Инициализация модуля - регистрация файла в /proc */

int init_module() { int rv = 0; Our_Proc_File = create_proc_entry(PROC_ENTRY_FILENAME, 0644, NULL); Our_Proc_File->owner = THIS_MODULE; Our_Proc_File->proc_iops = &Inode_Ops_4_Our_Proc_File; Our_Proc_File->proc_fops = &File_Ops_4_Our_Proc_File; Our_Proc_File->mode = S_IFREG | S_IRUGO | S_IWUSR; Our_Proc_File->uid = 0; Our_Proc_File->gid = 0; Our_Proc_File->size = 80;

if (Our_Proc_File == NULL) { rv = -ENOMEM; remove_proc_entry(PROC_ENTRY_FILENAME, &proc_root); printk(KERN_INFO "Error: Could not initialize /proc/test\n"); }

return rv; }

/* * Завершение работы модуля - дерегистрация файла в /proc. * Чревато последствиями * если в WaitQ остаются процессы, ожидающие своей очереди, * поскольку точка их исполнения * практически находится в функции open, которая * будет выгружена при удалении модуля. * Позднее, в 9 главе, я опишу как воспрепятствовать * удалению модуля в таких случаях */ void cleanup_module() { remove_proc_entry(PROC_ENTRY_FILENAME, &proc_root); }




Начало  Назад  Вперед