срочно нужен дельный совет опытного человека.
необходимо получить доступ к данным отображаемых в (user space) /proc/<ipd>/stat из ядра.пробовал регистрировать свой файл в proc и посредствам этого перемещаться по связанному списку proc fs.
Был не приятно удивлен не найдя PID-ов в списке.
Кто подскажет, как получить доступ к ним?
подскажите хоть где копать. Описания API proc так и не нашел.
Хоть бы кто сказал RTFM что ли.
>подскажите хоть где копать. Описания API proc так и не нашел.
>Хоть бы кто сказал RTFM что ли.
зачод
>зачодтоже хорошо
ничего не понятно. Что регестировать, откуда регестрировать, как проходить - понятно что посредством сего, но чего именно ? Код есть ?
>ничего не понятно. Что регестировать, откуда регестрировать, как проходить - понятно что
>посредством сего, но чего именно ? Код есть ?
что то типа этого
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
>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,... - не понимаю что за tasktask - усеченная структура процесса, без файловых дескрипторов и без информации о потомках. Любой поток - пользовательский, код драйвера, таймеры, и др. представлен именно как некое задание универсальное задание, которые в идеале могут выполняться паралельно друг от друга. В столь оторваном контексте совсем непонятно правильно он здесь используется, или нет,
>>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);