alguém tem ideia de como conseguir informações sobre o sistema como, por exemplo, memória ram disponível, processos em execução, número de processos em execução em um módulo de kernel (em linguagem C).
Se puderem informar alguma api (biblioteca “.h” de módulo de kernel) que retorne esses dados. Ou citar, também, chamadas de sistemas que façam essas tarefas.
Mais ou menos dessa maneira abaixo:
long int memoria_livre = get_memoria_livre( );
char *processos_atuais = get_processos_atuais( );
long int quantidade_processos = get_quantidade_processos( );
Não consegui encontrar as rotinas que preciso. Tem certeza que esse texto apresenta essas funções?
Tipo se eu registro um /proc/teste e quando der um "cat /proc/teste" imprima o que tem no "cat /proc/meminfo" e em outros proc, mas isso em linguagem C. Por exemplo:
intprocfile_read(char*buffer,char**buffer_location,off_toffset,intbuffer_length,int*eof,void*data){// imprime aqui informações relacionadas ao proc que eu registrei, no caso /proc/teste;// recupera informações da memória;char*str=executa(cat/proc/meminfo);/*armazenando em uma string, por exemplo*/printk(KERN_ALERT"\nInformações Memória --> %s\n",str);returnALGUMA_COISA;}
B
bezier_curve
/proc/meminfo pode ser considerado, para o programador, como um arquivo-texto.
Então a idéia é você ler esse arquivo e obter as informações adequadas.
Como é que você lê um arquivo em um módulo do kernel é que são elas (até porque estou supondo que, na hora que esse seu módulo estiver carregado, o módulo que gera o /proc/meminfo já esteja carregado). Como não sei programação do kernel, então não sei se as rotinas comuns da biblioteca-padrão do C (por exemplo, fgets) podem ser usadas.
andrecosta90
Então ‘bezier’, aí que está o problema. Não dá para chamar as rotinas comuns da biblioteca padrão da linguagem C. Tentei usar o open, read, fopen, não dá =/.
Tá tenso o problema.
Talvez tenha de acessar o sysfs em vez do procfs, mas isso é porque não sei chongas de programação de kernel do Linux.
andrecosta90
Esse problema tá tenso =/
J
juliocbq
andrecosta90:
Então 'bezier', aí que está o problema. Não dá para chamar as rotinas comuns da biblioteca padrão da linguagem C. Tentei usar o open, read, fopen, não dá =/.
Tá tenso o problema.