codestation escribió:
El código está bien, tu problema es que estas usando una definición incorrecta de la estructura utsname. Simplemente debes incluir <sys/utsname.h> en tu código y luego obtener tu variable con utsname *uts=new utsname();.
En resumen: _NUNCA_ redefinas una estructura del sistema si esta ya existe en los includes del sistema, eso solo causa problemas. Por si quedan dudas:
Código:
Codigo de retorno = 0
Nombre del sistema operativo: Linux
Nombre del equipo en la red: hatsune
Liberación del SO (fecha): 3.1.1-ck2
Versión SO: #1 SMP PREEMPT Tue Nov 15 21:31:23 VET 2011
Identificador de hardware: x86_64
Dominio: (none)
Le has puesto la guinda al pastel. ¡¡Un millón de gracias!! Creo que esto va a solucionar muchos de mis problemas
Editado -- Vie Dic 02, 2011 1:11 pm --
Tengo también en mi código una llamada a 'sysinfo' y sin redefinir la struct no funciona!El código es el siguiente:
Código:
/*struct sysinfo{
long uptime;
unsigned long loads[3];
unsigned long totalram;
unsigned long freeram;
unsigned long sharedram;
unsigned long bufferram;
unsigned long totalswap;
unsigned long freeswap;
unsigned short procs;
unsigned long totalhigh;
unsigned long freehigh;
unsigned int mem_unit;
char _f[20-2*sizeof(long)-sizeof(int)];
}info;*/
sysinfo *info=new sysinfo();
resul= syscall(SYS_sysinfo,info);
cout<<"-------------------------------SYSINFO--------------------------------------"<<endl;
cout<<"Codigo de retorno = " << resul <<endl;
cout<<"Uptime = "<< info.uptime <<endl;
cout<<"Carga 1 min "<< info.loads[0] <<endl;
cout<<"Carga 5 min = "<< info.loads[1] <<endl;
cout<<"Carga 15 min = "<< info.loads[2] <<endl;
cout<<"RAM total = "<< info.totalram <<endl;
cout<<"libre = "<< info.freeram <<endl;
cout<<"compartida = "<< info.sharedram <<endl;
cout<<"Swap total = "<< info.totalswap <<endl;
cout << "swap libre = "<<info.freeswap <<endl;
cout<<"libre = "<< info.bufferram <<endl;
cout<<"numero de procesos = "<< info.procs <<endl;
cout<<"tamaño de memoria alta = "<< info.totalhigh <<endl;
cout<<"tamaño de memoria alta libre en bytes = "<< info.freehigh <<endl;
cout<<"tamaño memoria = "<< info.mem_unit <<endl;
cout<<"\n"<<endl;
Haciendolo sin redefinir me salen errores en la linea 'sysinfo *info=new sysinfo();' diciendome que info no ha sido declarado, que falta un ; delante de sysinfo (esto es mentira) y tambien 'expected type-specifier before sysinfo.
Tengo incluida la <sys/sysinfo.h>.
No entiendo porque aquí la tengo que redefinir y sin embargo en la llamada de uname no.
Saludos
PD:La redifinición de la struct está comentada, por si se os ha pasado por alto
El código que me funciona a mi (o eso creo) es este:
Código:
int resul;
struct sysinfo{
long uptime;
unsigned long loads[3];
unsigned long totalram;
unsigned long freeram;
unsigned long sharedram;
unsigned long bufferram;
unsigned long totalswap;
unsigned long freeswap;
unsigned short procs;
unsigned long totalhigh;
unsigned long freehigh;
unsigned int mem_unit;
char _f[20-2*sizeof(long)-sizeof(int)];
}info;
//sysinfo *info=new sysinfo();
resul= syscall(SYS_sysinfo,&info);
cout<<"-------------------------------SYSINFO--------------------------------------"<<endl;
cout<<"Codigo de retorno = " << resul <<endl;
cout<<"Uptime = "<< info.uptime <<endl;
cout<<"Carga 1 min "<< info.loads[0] <<endl;
cout<<"Carga 5 min = "<< info.loads[1] <<endl;
cout<<"Carga 15 min = "<< info.loads[2] <<endl;
cout<<"RAM total = "<< info.totalram <<endl;
cout<<"libre = "<< info.freeram <<endl;
cout<<"compartida = "<< info.sharedram <<endl;
cout<<"Swap total = "<< info.totalswap <<endl;
cout << "swap libre = "<<info.freeswap <<endl;
cout<<"libre = "<< info.bufferram <<endl;
cout<<"numero de procesos = "<< info.procs <<endl;
cout<<"tamaño de memoria alta = "<< info.totalhigh <<endl;
cout<<"tamaño de memoria alta libre en bytes = "<< info.freehigh <<endl;
cout<<"tamaño memoria = "<< info.mem_unit <<endl;
cout<<"\n"<<endl;