The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Почему нельзя читать/писать файл из пространства/модуля"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Почему нельзя читать/писать файл из пространства/модуля"  
Сообщение от Den email(??) on 31-Окт-08, 18:25 
Была задача вести отдельный лог-файл для определенного драйвера. По умолчанию сообщения от него писались в системный лог с помощь функции printk, а хотелось чтобы сообщения от этого драйвера сохранялись бы в отдельный файл (/var/log/my_driver.log например). Я написал тестовый модуль, который при загрузке пишет в файл какую-то информацию. Но прочитал на одном англоязычном сайте, что так делать очень очень не рекомендуется. Вопрос: почему? Может кто ответит? Может у кого есть какие-нибудь идеи по этому поводу? Буду очень благодарен.
Вот код модуля:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/proc_fs.h>
#include <linux/sched.h>
#include <linux/string.h>
#include <linux/signal.h>
//#include <linux/signalfd.h>
#include <asm/unistd.h>
#include <asm/siginfo.h>
#include <asm/uaccess.h>
#include <linux/syscalls.h>
#include <linux/file.h>
#include <linux/fs.h>
#include <linux/fcntl.h>

MODULE_LICENSE("GPL");

static void write_file(char *filename, char *data)
{
  struct file *f;
  struct inode *inode;
  char buffer[255];
  int length_write;
  mm_segment_t orig_fs;
  f = filp_open(filename,O_CREAT|O_RDWR, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);    
  if (f && f->f_op && f->f_op->read && f->f_op->write) {
    snprintf(buffer, 255, data);
        orig_fs = get_fs();
    set_fs(KERNEL_DS);
    inode = f->f_dentry->d_inode;
    f->f_pos += inode->i_size;
    length_write = f->f_op->write(f, buffer, strlen(buffer), &f->f_pos);
    fput(f);
    set_fs(orig_fs);
   }
}

static int _mod_init(void)
{
  printk(KERN_INFO "init:\n");
  write_file("/tmp/test", "Bla-bla-bla.\n");
  return 0;
}

static void _mod_exit(void)
{
   printk(KERN_ALERT "exit\n");
}

module_init(_mod_init);
module_exit(_mod_exit);

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Почему нельзя читать/писать файл из пространства/модуля"  
Сообщение от Den email(??) on 31-Окт-08, 18:36 
Заголовок темы звучит как "Почему нельзя (не рекомендуют) читать/писать файл из пространства/модуля ядра?"
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Почему нельзя читать/писать файл из пространства/модуля"  
Сообщение от angra (ok) on 31-Окт-08, 18:37 
Если делать по уму, то вынос сообщений в отдельный файл делается в настройках syslog, а не в самой программе.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Почему нельзя читать/писать файл из пространства/модуля"  
Сообщение от Den email(??) on 31-Окт-08, 18:44 
Настройки syslog позволяют ловить 8 сообщений ядра : KERN_ERR, KERN_INFO, KERN_ALERT, KERN_DEBUG ну и т.д. Вопрос: можно ли настроить syslog так тонко чтобы он "складировал" сообщения именно от моего модуля/драйвера (а не от всех драйверов и модулей в ядре) и клал их куда мне надо? Я о таких возможностях syslog'а не слышал. Если можно так сделать, не подскажите где найти мануал?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Почему нельзя читать/писать файл из пространства/модуля"  
Сообщение от Аноним (??) on 31-Окт-08, 21:59 
>Настройки syslog позволяют ловить 8 сообщений ядра : KERN_ERR, KERN_INFO, KERN_ALERT, KERN_DEBUG
>ну и т.д. Вопрос: можно ли настроить syslog так тонко чтобы
>он "складировал" сообщения именно от моего модуля/драйвера (а не от всех
>драйверов и модулей в ядре) и клал их куда мне надо?
>Я о таких возможностях syslog'а не слышал. Если можно так сделать,
>не подскажите где найти мануал?

syslog бывают разные.

В любом случае, для отделения твоих сообщений снабди их префиксом (посмотри как все пишут). Это позволит их легко отфильтровать.

А syslog-ng тоже может их легко отфильтровать и послать в эксклюзивное местою

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Почему нельзя читать/писать файл из пространства/модуля"  
Сообщение от anonym on 05-Ноя-08, 16:40 
tail -f /var/log/chtonado | grep priznak >> kudanado &


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Почему нельзя читать/писать файл из пространства/модуля"  
Сообщение от Den email(??) on 10-Ноя-08, 14:53 
Реализовал с помощью сислога (точнее демона klogd). Все работает. Спасибо всем
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру