Linguagem C

10 respostas
legionarioba

Olá pessoALL…

Preciso fazer uma implementação utilizando JNI pra um trabalho na facul… Vou criar uma classe que irá ser distribuída como agente móvel…e, bem, vamos a problemática: existe na linguagem C algum .h que já retorne dados como memória livre, espaço livre em disco, nome do host? Sei que no linux existe um arquivo que possui todas essas informações(ai eu poderia usar apenas funções de leitura de caracter e arquivo), mas e no S.O de Tio Bill, alguém sabe abrir a caixa de ferramentas? :roll:

10 Respostas

smota

:arrow: Nome do Host

Espaço em disco e memória nao conheço uma maneira sem usar a API do SO.

legionarioba

Certo…

Se então eu for usar a Win32API, eu não precisaria mais do JNI? E pra Linux como eu faria no caso? :frowning: Tá soda…hehe

smota

Precisa de JNI de qualquer jeito já que essa informacao vc vai ter que usar fazendo uma chamada nativa.

No Linux vc teria uma biblioteca propria … ou seja, uma pra cada plataforma (lembrando que já não está na API do Java justamente por não haver um modo portável de fazer o que vc quer).

[ ]s

T

legionarioba:
Olá pessoALL…

Preciso fazer uma implementação utilizando JNI pra um trabalho na facul… Vou criar uma classe que irá ser distribuída como agente móvel…e, bem, vamos a problemática: existe na linguagem C algum .h que já retorne dados como memória livre, espaço livre em disco, nome do host? Sei que no linux existe um arquivo que possui todas essas informações(ai eu poderia usar apenas funções de leitura de caracter e arquivo), mas e no S.O de Tio Bill, alguém sabe abrir a caixa de ferramentas? :roll:

O nome do .h é (surpresa!) #include < windows.h >

Memória livre: GlobalMemoryStatus()
Espaço livre em disco: GetDiskFreeSpaceEx()
Nome do host: isso dá para fazer 100% java. (É o host que você quer, não o nome NetBIOS da máquina, que são coisas ligeiramente diferentes)

Para mais detalhes, e mais coisas que podem ser perguntadas ao Windows: http://msdn.microsoft.com .

(Em ambiente Windows sempre usei o Microsoft Visual Studio, portanto não sei como é o esquema de usar windows.h no gcc, ou então na versão “free” do compilador C++ da Borland ou da Microsoft.)

Se seu inglês é bom, dá para perguntar algumas coisas no fórum “Native
Methods” do http://forum.java.sun.com/index.jspa - eu atendo lá muito de vez em quando como edsonw , mas nunca dou respostas muito completas (o meu inglês não é lá aquela coisa, e não tenho muita paciência também…)

fcmartins

lembrando que já não está na API do Java justamente por não haver um modo portável de fazer o que vc quer
Não está na API do Java por preguiça da Sun de fazer. Um método p/ pegar o espaço livre em disco é solicitado desde a versão 1.3 e a Sun está protemetendo implementar agora na 6. Muita coisa que é feita com JNI existe em toda plataforma e já poderia estar no pacote oficial, a JavaComm é o exemplo clássico.

Se então eu for usar a Win32API, eu não precisaria mais do JNI? E pra Linux como eu faria no caso?
Você vai precisar do mesmo jeito, p/ usar a Win32 você usa C ou C++. P/ Linux, você terá que pesquisar as libs equivalentes.

Em ambiente Windows sempre usei o Microsoft Visual Studio, portanto não sei como é o esquema de usar windows.h no gcc, ou então na versão “free” do compilador C++ da Borland ou da Microsoft.
O Dev-C++ já vem com o port da Win32, é só usar o #include <windows.h> normalmente. Não esqueça de referenciar em seu projeto os includes do JNI.

louds

No linux, e a maioria dos UNIX, você pode ler alguns arquivos especiais, no caso do linux eles ficam dentro do procfs, que normalmente fica em /proc.

Você pode evitar usar JNI fazendo uma super gambiarra no windows, vários métodos da API do windows podem ser chamados atraves das extensões de shell.

legionarioba

Olá pessoALL,

Obrigado a todos pela ajuda. Deixa eu tentar explicar um pouco melhor a idéia: estou fazendo um trabalho aqui pra facul sobre agentes móveis. A intenção deste agente( é coletar algumas informações da máquina na qual o agente irá se “distribuir” (host, memória livre, espaço em disco, coisas afins…) . Os agentes serão criados usando o framework Aglets . A intenção é fazer com que a implementação sirva tanto pra Windows tanto quanto pra Linux… Então preciso identificar em meu agente qual o SO da máquina ao qual ele está rodando, e depois então usar o “código correto”…Ai cai uma perguntinha: Alguém já mexeu com Agentes? Os agentes, da mesma forma que os applets, possuem um “sand-box” pra que qualquer programa malicioso não faça o que bem queira no S.O., portanto, ainda estou pesquisando sobre que “permissões” eu terei usando meu agente, e até onde posso ir com o mesmo…Portanto, totalmente experimental ! hehe … Mas tá ficando very cool :slight_smile:

legionarioba

Só uma coisinha…onde encontro este bendito windows.h que não descubro? EU li que o Dev-C++ vem com ele, mas não quero depender do mesmo (Na facul talvez só possa mexer com o Turbo c++, que por sinal eu adoro…hehe) …

fcmartins

Aí você terá que baixar a SDK da MS que é grátis, mas tem 250 megas. Já o Dev-C++ tem uns 10.

T

Para checar qual é o sistema operacional é mais fácil. Basta usar System.getProperty. Por exemplo, em uma máquina Windows 2003:

java.version = 1.5.0_02
os.arch = x86
os.name = Windows 2003
os.version = 5.2

Em uma máquina Linux (Sun JVM)
java.version=1.3.1_04
os.arch=i386
os.name=Linux
os.version=2.4.19-4GB

ou (IBM JVM)
java.version=1.3.1
os.arch=x86
os.name=Linux
os.version=2.4.19-4GB

por exemplo.

Criado 28 de março de 2005
Ultima resposta 29 de mar. de 2005
Respostas 10
Participantes 5