Trucos de Programacion "C" y "C++" en castellano
Entornos Linux y Windows

Versión del sistema Operativo

Version del sistema operativo

Un problema comun para los programas, es que estos se hacen para un sistema operativo en concreto, y luego, el cliente corre un sistema operativo distinto (o una version distinta del sistema operativo), de manera que es intersante saber cual es el sistema operativo bajo el que corren, o que versión tienen.

Bajo Windows

Microsoft proporciona una API, que nos ayuda a obtener tanto la versión de windows (Windows 95, 98, etc...), como la revisión (Service Packs)

La función es GetVersionEx, y para emplearla, se necesita la estructura OSVERSIONINFO (Ambas se pueden consultar en la web de microsoft).

El tipo de variables OSVERSIONINFO es la siguiente estructura:

struct _OSVERSIONINFO {
DWORD dwOSVersionInfoSize;
DWORD dwMajorVersion;
DWORD dwMinorVersion;
DWORD dwBuildNumber;
DWORD dwPlatformId;
TCHAR szCSDVersion[128];
} OSVERSIONINFO;

  • dwPlatformId Contiene la plataforma a la que pertenece el sistema operativo (Basado en NT, tipo w9x, y probablemente futuros SO)
  • dwMajorVersion, y dwMinorVersion Identifican de manera univoa el sistema operativo (Ver web de Microsoft, o ejemplo expuesto más abajo)
  • szCSDVersion en este string se guarda la revisión del sistema operativo (El service Pack)
  • dwOSVersionInfoSize es una variable que debe ser iniciada antes de usar la función GetVersionEx; simplemente indica el tamaño reservado de la variable
  • dwBuildNumber indica la compilación que corresponde al ejecutable. Yo personalmente, nunca le he usado.

Estas son unas funciones, que usan la función, y la estructura, ilustrando su empleo:



Bajo Linux

En el fichero /proc se guarda información de muy diversa indole, sobre los procesos que estan corriendo en el sistema, el que atañe a este articulo en concreto (Se recomienda al lector que eche un ojo a todos, pues traen información muy interesante), es el fichero /proc/version. Este fichero es un fichero de solo lectura, con permisos a todo el mundo (Usuario/grupo: root, tambien con permiso de solo lectura).

Su formato es:
Linux version xx.xx.xx (Quiencompilo@donde) (Compilador usado) #Cuando se compilo

De modo que en mi maquina, actualmente tengo la siguiente cadena:
Linux version 2.4.24 (root@septeto.com) (gcc version 2.95.4 20011002 (SuSE)) #2 Sun Nov 30 13:20:02 CET 2003

Luego, una forma valida sería obtener de este fichero la información, sin embargo, existe un medio más estandar de llevar a cabo esta tarea, y es con la función posix uname. La función uname, tiene la siguiente sintaxis:

int uname(struct utsname *buf);

Como se puede apreciar, utiliza como parámetro un puntero a una estructura utsname:

struct utsname {
char sysname[SYS_NMLN];
char nodename[SYS_NMLN];
char release[SYS_NMLN];
char version[SYS_NMLN];
char machine[SYS_NMLN];
};

  • sysname Nombre de la implementacion ddel sistema operativo
  • nodename Nombre del nodo
  • release Versión actual de la implementación del sistema operativo (la versión del kernel en el caso de linux)
  • version Versión actual de la release (La fecha de compilación habitualmente)
  • machine Nombre del tipo de máquina en la que el sistema esta funcionando (un i686 en mi caso)

Pongo un ejemplo de como obtener la version del kernel:

 

 

Webmaster

Hiperion Pozuelo, Madrid, ES
Soy una persona sencilla, quizas demasiado seria, que disfruto de la vida.
Actualmente busco pareja.