sistemas sistema proximo para operativos operativo nuevos nuevo microsoft como chrome c linux operating-system

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