如何用c语言获取当前操作系统的类型

Python011

如何用c语言获取当前操作系统的类型,第1张

如何判断当前是什么操作系统

#if

defined(_AIX)

//

IBM

AIX

...

...

#endif

#if

defined(__sun)

//

SUN

OS

...

...

#endif

linux下定义了

"linux",

Sco

Openserver下定义了unix

上面的方法有时候不是很确定,也不好自己掌握和控制,下面探讨一下另一个方法:

在UNIX下有一个uname的命令,在不同的操作系统下有不同的返回,

例如:

SCO:

SCO_SV

Linux:

Linux

AIX:

AIX

Unixware:

UnixWare

可以在makefile文件中增加如下句子来判断当前的操作系统类型,和编译选择:

OSTYPE=`uname`

CFLAGS_SCO

=

-D

SCO_SV

CFLAGS_LINUX

=

-D

AIX

prog:

@if

[

"$(OSTYPE)"

=

'SCO_SV'

]then

make

prog1else

make

prog2fi

prog1:

$(CC)

-o

tt

tt.c

$(CFLAGS_SCO)

prog2:

$(CC)

-o

tt2

tt2.c

$(CFLAGS_AIX)

如上在编译命令行中增加-D

SCO_SV的定义,

程序的源代码中可以如下使用:

#ifdef

SCO_SV

typedef

unsigned

int

socklen_t

#endif

如此,源代码就很容易的适应不同的操作系统了。

redhat系统可直接从文件中读取:cat /etc/redhat-releasewindows: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}