Posted by Brian Clifton
Written April 11, 2009 at 11:33
Sample C program I wrote based on this article:
http://www.novell.com/coolsolutions/feature/11251.html
#include <stdio.h>
typedef enum{
DISTRO_UNKNOWN=-1,
DISTRO_SUSE=0,
DISTRO_REDHAT,
DISTRO_FEDORA,
DISTRO_SLACKWARE,
DISTRO_DEBIAN,
DISTRO_MANDRAKE,
DISTRO_YELLOW_DOG,
DISTRO_SUN_JDS,
DISTRO_SOLARIS_SPARC,
DISTRO_GENTOO,
DISTRO_UNITEDLINUX,
DISTRO_UBUNTU
} LinuxDistro;
char FileExists(char* strFile)
{
FILE* f = fopen(strFile,"r");
if(f){
fclose(f);
return(1);
}
return(0);
}
LinuxDistro IdentifyLinuxDistro(void)
{
if(FileExists("/etc/SUSE-release"))
return(DISTRO_SUSE);
if(FileExists("/etc/redhat-release"))
return(DISTRO_REDHAT);
if(FileExists("/etc/redhat_version"))
return(DISTRO_REDHAT);
if(FileExists("/etc/fedora-release"))
return(DISTRO_FEDORA);
if(FileExists("/etc/slackware-release"))
return(DISTRO_SLACKWARE);
if(FileExists("/etc/slackware-version"))
return(DISTRO_SLACKWARE);
if(FileExists("/etc/debian_release"))
return(DISTRO_DEBIAN);
if(FileExists("/etc/debian_version"))
return(DISTRO_DEBIAN);
if(FileExists("/etc/mandrake-release"))
return(DISTRO_MANDRAKE);
if(FileExists("/etc/yellowdog-release"))
return(DISTRO_YELLOW_DOG);
if(FileExists("/etc/sun-release"))
return(DISTRO_SUN_JDS);
if(FileExists("/etc/release"))
return(DISTRO_SOLARIS_SPARC);
if(FileExists("/etc/gentoo-release"))
return(DISTRO_GENTOO);
if(FileExists("/etc/UnitedLinux-release"))
return(DISTRO_UNITEDLINUX);
if(FileExists("/etc/lsb-release"))
return(DISTRO_UBUNTU);
return(DISTRO_UNKNOWN);
}
int main(int argc,char** argv)
{
LinuxDistro distro = IdentifyLinuxDistro();
switch(distro){
case DISTRO_SUSE: printf("SUSE"); break;
case DISTRO_REDHAT: printf("Redhat"); break;
case DISTRO_FEDORA: printf("Fedora"); break;
case DISTRO_SLACKWARE: printf("Slackware"); break;
case DISTRO_DEBIAN: printf("Debian"); break;
case DISTRO_MANDRAKE: printf("Mandrake"); break;
case DISTRO_YELLOW_DOG: printf("Yellow dog"); break;
case DISTRO_SUN_JDS: printf("Sun JDS"); break;
case DISTRO_SOLARIS_SPARC: printf("Solaris/Sparc"); break;
case DISTRO_GENTOO: printf("Gentoo"); break;
case DISTRO_UNITEDLINUX: printf("UnitedLinux"); break;
case DISTRO_UBUNTU: printf("Ubuntu"); break;
default: printf("Unknown"); break;
}
return(0);
}