Brian Clifton . com

Identifying the Linux Distro running

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);
}

 

© Brian Clifton. All rights reserved.