如何用C语言获取主机操作系统的版本号

Python039

如何用C语言获取主机操作系统的版本号,第1张

redhat系统可直接从文件中读取:cat /etc/redhat-release

windows:

GetUserName(LPWSTR lpBuffer, LPDWORD nSize)

lpBuffer是一个数组的地址,用来存贮得到的用户名,nsize是个指针,指向此存贮此数组大小的单元,就是数组能存贮的字符数量

GetVersionExW(LPOSVERSIONINFOW)

参数LPOSVERSIONINFO是一个指向OSVERSIONINFO类型变量的指针,

具体判断代码如下

定义 OSVERSIONINFO osvi

然后调用函数取得版本号,判断如下

switch (osvi.dwPlatformId)

{

case VER_PLATFORM_WIN32_NT:

if (osvi.dwMajorVersion == 5&&osvi.dwMinorVersion == 0)

{

strOSVersion = TEXT("Windows 2000")

}

else if (osvi.dwMajorVersion == 5&&osvi.dwMinorVersion == 1)

{

strOSVersion = TEXT("Windows XP")

}

else if(osvi.dwMajorVersion == 6&&osvi.dwMinorVersion == 0)

{

strOSVersion = TEXT("Windows Vista")

}

else if (osvi.dwMajorVersion == 4&&osvi.dwMinorVersion == 0)

{

strOSVersion = TEXT("Windows NT")

}

break

case VER_PLATFORM_WIN32_WINDOWS:

if (osvi.dwMajorVersion == 4&&osvi.dwMinorVersion == 10)

{

strOSVersion = TEXT("Windows 98")

}

else if (osvi.dwMajorVersion == 4&&osvi.dwMinorVersion == 90)

{

strOSVersion = TEXT("Windows ME")

}

else

{

strOSVersion = TEXT("Windows 95")

}

break

default:

break

}

c语言本身是不提供的。

在windows下使用系统命令或windows.h

//列子

#include "stdio.h" 

#include "conio.h" 

main() 

int i,j 

char ip[20] 

char temp[100] 

char ch='\0' 

FILE *fp 

system("ipconfig >d:\\myip.txt") 

if ((fp=fopen("d:\\myip.txt","r"))==NULL) 

printf("the file can not open:\nPress any key to exit:") 

getch() 

exit(1) 

for (i=0i<7i++) 

{fgets(temp,80,fp) /*跳过一些行*/ 

/*printf("%s\n",temp) */} 

fgets(temp,80,fp) 

i=0j=0 

while (temp[i++]!=':') 

 

while (temp[i]!='\n') 

ip[j++]=temp[i++] 

ip[j]=0 

printf("IP=%s\n",ip) 

fclose(fp) 

system("del d:\\myip.txt") 

getch() 

} 在Linux下 #include <stdio.h>  

#include <sys/types.h>  

#include <sys/socket.h>  

#include <sys/ioctl.h>  

#include <netinet/in.h>  

#include <net/if.h>  

#include <net/if_arp.h>  

#include <arpa/inet.h>  

#include <errno.h>  

      

#define ETH_NAME        "eth0"  

      

int main()  

{  

        int sock  

        struct sockaddr_in sin  

        struct ifreq ifr  

              

        sock = socket(AF_INET, SOCK_DGRAM, 0)  

        if (sock == -1)  

        {  

                perror("socket")  

                return -1                  

        }  

              

        strncpy(ifr.ifr_name, ETH_NAME, IFNAMSIZ)  

        ifr.ifr_name[IFNAMSIZ - 1] = 0  

              

        if (ioctl(sock, SIOCGIFADDR, &ifr) < 0)  

        {  

                perror("ioctl")  

                return -1  

        }  

      

        memcpy(&sin, &ifr.ifr_addr, sizeof(sin))  

        fprintf(stdout, "eth0: %s\n", inet_ntoa(sin.sin_addr))  

              

        return 0  

}