URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6098
[ Назад ]

Исходное сообщение
"Доступ к /proc/<ipd>/stat из ядра"

Отправлено Berserk , 18-Янв-07 19:38 
срочно нужен дельный совет опытного человека.
необходимо получить доступ к данным отображаемых в (user space) /proc/<ipd>/stat  из ядра.

пробовал регистрировать свой файл в proc и посредствам этого перемещаться по связанному списку proc fs.
Был не приятно удивлен не найдя PID-ов в списке.
Кто подскажет, как получить доступ к ним?


Содержание

Сообщения в этом обсуждении
"Доступ к /proc/<ipd>/stat из ядра"
Отправлено Berserk , 18-Янв-07 20:14 
подскажите хоть где копать. Описания API proc так и не нашел.
Хоть бы кто сказал RTFM что ли.

"Доступ к /proc/<ipd>/stat из ядра"
Отправлено exn , 18-Янв-07 21:35 
>подскажите хоть где копать. Описания API proc так и не нашел.
>Хоть бы кто сказал RTFM что ли.


зачод


"Доступ к /proc/<ipd>/stat из ядра"
Отправлено Berserk , 18-Янв-07 21:54 
>зачод

тоже хорошо


"Доступ к /proc/<ipd>/stat из ядра"
Отправлено BigHo , 19-Янв-07 12:40 
ничего не понятно. Что регестировать, откуда регестрировать, как проходить - понятно что посредством сего, но чего именно ? Код есть ?

"Доступ к /proc/<ipd>/stat из ядра"
Отправлено Berserk , 19-Янв-07 17:07 
>ничего не понятно. Что регестировать, откуда регестрировать, как проходить - понятно что
>посредством сего, но чего именно ? Код есть ?
что то типа этого
p
            filp = filp_open("/proc/2323/stat", 00, O_RDONLY);
            pi = PROC_I(filp->f_dentry->d_inode);
                if (!pi->op.proc_read)
                    length  = pi->op.proc_read(pi->task, buf);
                printk(KERN_INFO "\n\n%s\n\n", buf);

//          filp_close(filp);

на выходе в dmes должно быть содержимое /proc/2323/stat
все еще не разобрался с proc_read(pi->task,... - не понимаю что за task


"Доступ к /proc/<ipd>/stat из ядра"
Отправлено BigHo , 19-Янв-07 18:09 
>filp = filp_open("/proc/2323/stat", 00, O_RDONLY);
>            pi = PROC_I(filp->f_dentry->d_inode);
>                if (!pi->op.proc_read)

Вот здесь я на месте ядра сделал бы kernel panic, потому как pi->op.proc_read == NULL :)

>                    length  = pi->op.proc_read(pi->task, buf);


>            
>    printk(KERN_INFO "\n\n%s\n\n", buf);
>
>//          filp_close(filp);

Точно закрывать не надо ?

>на выходе в dmesg должно быть содержимое /proc/2323/stat
>все еще не разобрался с proc_read(pi->task,... - не понимаю что за task

task - усеченная структура процесса, без файловых дескрипторов и без информации о потомках. Любой поток - пользовательский, код драйвера, таймеры, и др. представлен именно как некое задание универсальное задание, которые в идеале могут выполняться паралельно друг от друга. В столь оторваном контексте совсем непонятно правильно он здесь используется, или нет,


"Доступ к /proc/<ipd>/stat из ядра"
Отправлено Berserk , 19-Янв-07 21:47 
>>filp = filp_open("/proc/2323/stat", 00, O_RDONLY);
>>            pi = PROC_I(filp->f_dentry->d_inode);
>>                if (!pi->op.proc_read)
>
>Вот здесь я на месте ядра сделал бы kernel panic, потому как pi->op.proc_read == NULL :)
>
>>                    length  = pi->op.proc_read(pi->task, buf);
>
>
>>            
>>    printk(KERN_INFO "\n\n%s\n\n", buf);
>>
>>//          filp_close(filp);
>
>Точно закрывать не надо ?
>
>>на выходе в dmesg должно быть содержимое /proc/2323/stat
>>все еще не разобрался с proc_read(pi->task,... - не понимаю что за task
>
>task - усеченная структура процесса, без файловых дескрипторов и без информации о
>потомках. Любой поток - пользовательский, код драйвера, таймеры, и др. представлен
>именно как некое задание универсальное задание, которые в идеале могут выполняться
>паралельно друг от друга. В столь оторваном контексте совсем непонятно правильно
>он здесь используется, или нет,

Спасибо за ответ.
В ядре я обнаружил функцию идеально подходящую для моих нужд
static ssize_t proc_info_read(struct file * file, char * buf, size_t count, loff_t *ppos);