The OpenNET Project / Index page

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

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

"чтение файла из ядра в Linux"  
Сообщение от Al (??) on 08-Янв-07, 00:24 
Почему ядро не позволяет работать с файловой системой также, как это возможно в пользовательских приложениях?
Для реализации данной задачи мне пришлось прибегать к обману ядра в отношении адресации его памяти. Но это и не красиво, и не хорошо.
И как лучше поступать в описанной ситуации?
Спасибо.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

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


1. "чтение файла из ядра в Linux"  
Сообщение от newser (ok) on 08-Янв-07, 00:28 
>Почему ядро не позволяет работать с файловой системой также, как это возможно
>в пользовательских приложениях?
>Для реализации данной задачи мне пришлось прибегать к обману ядра в отношении
>адресации его памяти. Но это и не красиво, и не хорошо.
>
>И как лучше поступать в описанной ситуации?
>Спасибо.

Дважды прочитал, ничего не понял. Молодой человек, попробуйте высказаться яснее. И объясните мне неразумному, чем системные вызовы open и read отличаются в ядре и в пользовательских приложениях?

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

2. "чтение файла из ядра в Linux"  
Сообщение от JetSnaiL email(ok) on 08-Янв-07, 18:49 
>>Почему ядро не позволяет работать с файловой системой также, как это возможно
>>в пользовательских приложениях?
>>Для реализации данной задачи мне пришлось прибегать к обману ядра в отношении
>>адресации его памяти. Но это и не красиво, и не хорошо.
>>
>>И как лучше поступать в описанной ситуации?
>>Спасибо.
>
>Дважды прочитал, ничего не понял. Молодой человек, попробуйте высказаться яснее. И объясните
>мне неразумному, чем системные вызовы open и read отличаются в ядре
>и в пользовательских приложениях?

Не уверен, но они должны отличаться, хотя бы проверкой прав, и т.п.
Все таки user space API - это тебе не kernel.

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

3. "чтение файла из ядра в Linux"  
Сообщение от ppp (??) on 09-Янв-07, 00:54 
потому что для общения ядра с юзерспейс есть ioctl
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "чтение файла из ядра в Linux"  
Сообщение от Al (??) on 09-Янв-07, 22:16 
>потому что для общения ядра с юзерспейс есть ioctl
Хорошо. Ну файл как прочитать?
Я это делаю примерно так:

static int sec_read_config_file(const char *fread) {
    int length_to_read, length_readed, i;
    char *buffer = NULL;
    struct file * f = NULL;
    mm_segment_t orig_fs;

    int err;
    
    f = filp_open(fread, O_RDONLY, 00);
    if (IS_ERR(f))
    {
    printk(KERN_ALERT "Error opening file.\n");
    goto error_out;
    }

    if (!f || !f->f_op || !f->f_op->read)
    goto error_out;
    
    length_to_read = f->f_dentry->d_inode->i_size;
    buffer = kmalloc(length_to_read+1, GFP_KERNEL);
    if(buffer == NULL)
    printk(KERN_ALERT "Error allocating buffer\n");

    f->f_pos = 0;

////////////////////////////////////////
//  ВНИМАНИЕ!!!!
//  Ключевой момент!!!

    orig_fs = get_fs();
    set_fs(KERNEL_DS);
////////////////////////////////////////

    any_struct *as;
    as = kmalloc(sizeof(any_struct), GFP_KERNEL);

    size_t size = 0;
    length_readed = f->f_op->read(f, &size, 1024, &f->f_pos);

    fput(f);
        
    kfree(buffer);
    
    return 0;

error_out:
    printk(KERN_ALERT "File (write object) is a NULL pointer!!! (%c) \n", f);
    return -1;
}

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

5. "чтение файла из ядра в Linux"  
Сообщение от Al (??) on 10-Янв-07, 21:01 
Так чего?
Кто-нибудь прольет свет на мою темную голову?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "чтение файла из ядра в Linux"  
Сообщение от int_0dh email on 11-Янв-07, 22:14 
>Так чего?
>Кто-нибудь прольет свет на мою темную голову?


за такой код нужно отрывать йатца ИМХО. нет слов.

по делу: а зачем вам понадобилось читать что-то из ядра?
если для конфигурации какого-нибудь драйверка, то гораздо грамотнее написать утилитку, которая будет читать этот файл и отдавать содержимое конф. структуры драйверу через IOCTL.

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

7. "чтение файла из ядра в Linux"  
Сообщение от Al (??) on 12-Янв-07, 19:53 
>>Так чего?
>>Кто-нибудь прольет свет на мою темную голову?
>
>
>за такой код нужно отрывать йатца ИМХО. нет слов.
>
>по делу: а зачем вам понадобилось читать что-то из ядра?
>если для конфигурации какого-нибудь драйверка, то гораздо грамотнее написать утилитку, которая будет
>читать этот файл и отдавать содержимое конф. структуры драйверу через IOCTL.
>


За что яйца-то?

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

8. "чтение файла из ядра в Linux"  
Сообщение от Berserk on 18-Янв-07, 19:09 
>>Так чего?
>>Кто-нибудь прольет свет на мою темную голову?
>
>
>за такой код нужно отрывать йатца ИМХО. нет слов.
>
>по делу: а зачем вам понадобилось читать что-то из ядра?
>если для конфигурации какого-нибудь драйверка, то гораздо грамотнее написать утилитку, которая будет
>читать этот файл и отдавать содержимое конф. структуры драйверу через IOCTL.
>


Тема замята?

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

9. "чтение файла из ядра в Linux"  
Сообщение от Al (??) on 18-Янв-07, 19:26 
>>>Так чего?
>>>Кто-нибудь прольет свет на мою темную голову?
>>
>>
>>за такой код нужно отрывать йатца ИМХО. нет слов.
>>
>>по делу: а зачем вам понадобилось читать что-то из ядра?
>>если для конфигурации какого-нибудь драйверка, то гораздо грамотнее написать утилитку, которая будет
>>читать этот файл и отдавать содержимое конф. структуры драйверу через IOCTL.
>>
>
>
>Тема замята?

нет

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

10. "чтение файла из ядра в Linux"  
Сообщение от Berserk on 18-Янв-07, 19:31 
>>>>Так чего?
>>>>Кто-нибудь прольет свет на мою темную голову?
>>>
>>>
>>>за такой код нужно отрывать йатца ИМХО. нет слов.
>>>
>>>по делу: а зачем вам понадобилось читать что-то из ядра?
>>>если для конфигурации какого-нибудь драйверка, то гораздо грамотнее написать утилитку, которая будет
>>>читать этот файл и отдавать содержимое конф. структуры драйверу через IOCTL.
>>>
>>
>>
>>Тема замята?
>
>нет

сам сейс пробовал подобный код
f_dentry->d_inode->i_size - возвращает 0 (правда файл находится на proc FS)

на ext3 такого нет - все читается

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

13. "чтение файла из ядра в Linux"  
Сообщение от Al (??) on 18-Янв-07, 21:22 
>>>>>Так чего?
>>>>>Кто-нибудь прольет свет на мою темную голову?
>>>>
>>>>
>>>>за такой код нужно отрывать йатца ИМХО. нет слов.
>>>>
>>>>по делу: а зачем вам понадобилось читать что-то из ядра?
>>>>если для конфигурации какого-нибудь драйверка, то гораздо грамотнее написать утилитку, которая будет
>>>>читать этот файл и отдавать содержимое конф. структуры драйверу через IOCTL.
>>>>
>>>
>>>
>>>Тема замята?
>>
>>нет
>
>сам сейс пробовал подобный код
>f_dentry->d_inode->i_size - возвращает 0 (правда файл находится на proc FS)
>
>на ext3 такого нет - все читается

Все правильно.

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

11. "чтение файла из ядра в Linux"  
Сообщение от Berserk on 18-Янв-07, 19:31 
>>>>Так чего?
>>>>Кто-нибудь прольет свет на мою темную голову?
>>>
>>>
>>>за такой код нужно отрывать йатца ИМХО. нет слов.
>>>
>>>по делу: а зачем вам понадобилось читать что-то из ядра?
>>>если для конфигурации какого-нибудь драйверка, то гораздо грамотнее написать утилитку, которая будет
>>>читать этот файл и отдавать содержимое конф. структуры драйверу через IOCTL.
>>>
>>
>>
>>Тема замята?
>
>нет


Кстати, автор, тут ошибка:
length_readed = f->f_op->read(f, &size, 1024, &f->f_pos);

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

12. "чтение файла из ядра в Linux"  
Сообщение от Al (??) on 18-Янв-07, 21:20 
>>>>>Так чего?
>>>>>Кто-нибудь прольет свет на мою темную голову?
>>>>
>>>>
>>>>за такой код нужно отрывать йатца ИМХО. нет слов.
>>>>
>>>>по делу: а зачем вам понадобилось читать что-то из ядра?
>>>>если для конфигурации какого-нибудь драйверка, то гораздо грамотнее написать утилитку, которая будет
>>>>читать этот файл и отдавать содержимое конф. структуры драйверу через IOCTL.
>>>>
>>>
>>>
>>>Тема замята?
>>
>>нет
>
>
>Кстати, автор, тут ошибка:
>length_readed = f->f_op->read(f, &size, 1024, &f->f_pos);
Где? Если про 1024, так это только пример, а не отлаженный код :)
Можно заменить на "sizeof(any_struct)".


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

14. "чтение файла из ядра в Linux"  
Сообщение от Berserk email(ok) on 18-Янв-07, 21:44 

>Где? Если про 1024, так это только пример, а не отлаженный код
>:)
>Можно заменить на "sizeof(any_struct)".

совсем не 1024
f->f_op->read(f, &size, 1024, &f->f_pos);
второй аргумент буфер а не size
примерно так
br = filp->f_op->read(filp,buf,10,&filp->f_pos);

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

15. "чтение файла из ядра в Linux"  
Сообщение от Al (??) on 18-Янв-07, 21:58 
>
>>Где? Если про 1024, так это только пример, а не отлаженный код
>>:)
>>Можно заменить на "sizeof(any_struct)".
>
>совсем не 1024
>f->f_op->read(f, &size, 1024, &f->f_pos);
>второй аргумент буфер а не size
>примерно так
>br = filp->f_op->read(filp,buf,10,&filp->f_pos);
Может быть. Писал по памяти.


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

16. "чтение файла из ядра в Linux"  
Сообщение от Berserk email(ok) on 18-Янв-07, 22:07 

>Может быть. Писал по памяти.

ну а в остальном все верно, я полагаю, именно так и рекомендуют поступать все мануалы видимые мною

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

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

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




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

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