Чтение устройства из модуля ядра аналогично команде ls

Я хочу прочитать устройство из модуля ядра. Вывод должен быть похож на вывод команды «ls».

Моя функция чтения:

static void read_file(char *filename)
{
  struct file *fd;
  char buf[1];
  unsigned long long offset=0;
  mm_segment_t old_fs = get_fs();
  set_fs(KERNEL_DS);

  fd = filp_open(filename, O_RDONLY, 0);
  if (fd >= 0) {
    printk(KERN_DEBUG);
    while (vfs_read(fd, buf, 1,&offset) == 1)
      {

    if((0 <= buf[0]) && (buf[0] <=255))
      printk("%c", buf[0]);
      } 
        printk(KERN_ALERT "Loop Ran\n");
    filp_close(fd,NULL);
  }

  set_fs(old_fs);
}

но он выдает результат вместе со многими значениями мусора. У меня есть файл с именем «file1» в моем каталоге монтирования.

o/p (в нем есть «потерянный + найденный» и «файл1», но с этими мусорными значениями)

[

  558.452235] 
[  558.452238] (\x02[&  \x01  \x05\x1dQ\x04S\x01,Q\x01
                                                      8\x02\x01
                                                               -\x06AN\x0ex\x7f
[  558.452308] 'J6pA{h<;
                        \x01
                            ,Q\x01*+,'\x1f\x04\x02\x04* + , 4\x07\x05\x04\x03 \x04 \x05 \x06 \x07 \x08   
[  558.455546]  

 \x0e \x0f \x10 \x11 \x12 \x13 \x14 \x15 \x16 \x17 \x18 \x19 \x1a \x1b \x1c \x1d \x1e \x1f   ! " # $ % & ' ( ) 

    \x01\x0f,Q,Q,QA\x04\x1dQCQCQ\x03\x020\x04\x04,Q,Q,Q\x01A0,Q,Q,Q\x02\x18CQCQCQ\x01Z\x02
                                         \x01\x02.\x02
                                                      \x02\x02..
                                                                \x14
    [  558.525090] \x02lost+found
                                 \x03\x05\x01file1

                                                  \x01\x02.\x02\x03\x02\x02..\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x03\x04\x05\x06\x07\x08   
    [  558.529810] 

    \x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&'()
    [  561.391843] (\x02[&  \x01  \x05,QS\x01,Q\x01
                                                   \x018\x02\x01
                                                                -\x06AN\x0ex\x7f
    [  561.391914] 'J6pA{h<;
                            \x01
                                ,Q\x01*+,'\x1f\x04\x02\x04* + , 4\x07\x05\x04\x07
    [  562.125651] Loop Ran

Но я хочу, чтобы вывод был похож на вывод команды «ls» в bash. который показывает чистое имя файлов и каталогов. Я искал это в Google, но это не помогает. Пожалуйста, помогите.


person Mahi Singh    schedule 02.07.2013    source источник
comment
Вы пытаетесь прочитать содержимое файла, который не имеет ничего общего с выводом ls. Какую реальную проблему вы пытаетесь решить?   -  person CL.    schedule 03.07.2013
comment
@КЛ. Я хочу прочитать содержимое каталога, который является точкой монтирования устройства. Например: /dev/loop0 монтируется на /mnt/crypt. Итак, я хочу прочитать содержимое /mnt/crypt с помощью модуля ядра. Поскольку монтирование может измениться в любое время, я думаю, что подход должен заключаться в чтении файла /dev/loop0. И я не могу его правильно прочитать. Пожалуйста, помогите!   -  person Mahi Singh    schedule 03.07.2013
comment
Вы путаете блочные устройства и файловые системы. И зачем вообще это нужно делать в ядре?   -  person CL.    schedule 03.07.2013
comment
@КЛ. На самом деле я хочу прочитать содержимое этого блочного устройства. Каким должен быть мой подход? Я хочу периодически вести журнал этого контента, функциональность которого я добавлю позже с помощью таймера, и поэтому я хочу добавить этот модуль в ядро.   -  person Mahi Singh    schedule 03.07.2013
comment
Вывод ls не имеет ничего общего с блочными устройствами, он показывает содержимое файловой системы. Создание журнала с помощью таймеров не требует модуля ядра.   -  person CL.    schedule 03.07.2013
comment
@КЛ. Да, я согласен. но в любом случае, если я хочу прочитать блочное устройство из ядра, как мне это сделать? Насколько я понимаю, ls — это команда bash, которую мы не можем использовать в ядре. Возможно ли каким-либо образом иметь подобную функциональность? и, как вы говорите, ls не имеет ничего общего с блочными устройствами, но я использую только каталог монтирования устройства.   -  person Mahi Singh    schedule 03.07.2013
comment
@Кл. Однажды я заметил, что кто-то комментирует сообщение о том, что люди пытаются решить другую проблему здесь, в SO. Люди делают это очень часто.   -  person    schedule 03.07.2013
comment
@ Махи Сингх: Значит, я думаю, это вопрос общего интереса? Я боялся, что вы пытаетесь решить другую проблему неправильным способом. Люди часто делают это на этом сайте.   -  person    schedule 03.07.2013
comment
Можно поинтересоваться, зачем нужно открывать файл в ядре? В 99,9999% случаев это плохая идея.   -  person tangrs    schedule 03.07.2013
comment
Возможный дубликат: stackoverflow.com/q/8347553/1401351   -  person Peter    schedule 03.07.2013
comment
Пожалуйста, прочтите эту информацию, почему чтение/запись из пространства ядра является плохой идеей.   -  person Abhijeet Kasurde    schedule 23.04.2014