proximo - Obtener el nombre del sistema operativo con C
sistema operativo windows 10 (4)
Sé que puedo verificar mi nombre de sistema operativo con este simple comando: lsb_release -ds
. Pero también sé que no es portátil en todas las plataformas donde lo necesito. Intenté struct utsname info;
y uname(&info)
y funciona muy bien, pero me da solo el nombre "base" - "Linux".
¿Hay alguna forma portátil (C) de obtener el nombre completo del sistema operativo? Portátil entre Centos, Debian, Fedora, OpenSUSE, RedHat, Ubuntu al menos? Aclamaciones
Aquí está el código C que dice el nombre del sistema operativo. También puede editar el código para otro propósito, utilizando la misma lógica.
#include<stdio.h>
int main()
{
FILE *fp;
char buffer[50] = " ";
fp = popen("lsb_release -ds", "r");
fgets(buffer, 50, fp);
pclose(fp);
printf("Name of the OS is : %s",buffer);
return 0;
}
La llamada al sistema uname
le proporciona el tipo de sistema genérico ( Linux
en todos sus casos) en el campo sysname
, pero también le proporciona datos adicionales en los campos de release
, version
y machine
. El campo de release
le dará la versión del kernel, y el campo de version
le dará la versión general del sistema, que será diferente para todas las variantes de Linux que menciona.
Puede intentar usar popen (3) para ejecutar y leer la salida de command /usr/bin/lsb_release -ds
. Si eso falla, puede leer y analizar /etc/issue
Tenga en cuenta que los administradores de sistemas inteligentes o paranoides pueden editar y configurar ese /etc/issue
a voluntad.
Pero no entiendo por qué quieres saber todo eso (desde dentro de un programa de C ), en otras palabras, por qué la llamada de uname
no es suficiente.
En particular, hay muchas distribuciones especializadas derivadas de Debian (o Redhat), y no entiendo por qué el nombre de la distribución particular sería importante para un programa C. Importa mucho más para propósitos de empaque ...
LSB en nombre lsb_release
establece para "Linux Standard Base", pero no es tan estándar.
Llegué al siguiente código: https://github.com/myaut/tsload/blob/master/agent/lib/libhostinfo/plat/linux/uname.c
Controla:
-
/etc/oracle-release
para Oracle Enterprise Linux -
/etc/redhat-release
para RHEL otros derivados -
/etc/SuSE-release
para derivados de SuSE -
lsb_release
salida para cualquier otro Linux
También corta palabras irrelevantes, es decir, CentOS release 6.3 (Final)
-> CentOS 6.3