You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Cygwin环境下用C语言获取Windows系统版本的方法

获取Cygwin环境下的Windows系统版本

方法1:直接调用Windows原生API

Cygwin的GCC允许直接调用Windows系统函数,无需安装微软开发工具。推荐使用RtlGetVersion(替代已废弃的GetVersionEx),它能准确获取Windows版本信息。

示例代码:

#include <stdio.h>
#include <windows.h>

typedef NTSTATUS(WINAPI* RtlGetVersionPtr)(PRTL_OSVERSIONINFOW);

int main() {
    RTL_OSVERSIONINFOW osvi;
    osvi.dwOSVersionInfoSize = sizeof(osvi);

    // 动态加载ntdll.dll并获取RtlGetVersion函数地址
    HMODULE hNtdll = LoadLibraryW(L"ntdll.dll");
    if (!hNtdll) {
        fprintf(stderr, "Failed to load ntdll.dll\n");
        return 1;
    }

    RtlGetVersionPtr pRtlGetVersion = (RtlGetVersionPtr)GetProcAddress(hNtdll, "RtlGetVersion");
    if (!pRtlGetVersion) {
        fprintf(stderr, "Failed to get RtlGetVersion address\n");
        FreeLibrary(hNtdll);
        return 1;
    }

    NTSTATUS status = pRtlGetVersion(&osvi);
    if (status >= 0) {
        printf("Windows Version: %d.%d Build %d\n", 
               osvi.dwMajorVersion, 
               osvi.dwMinorVersion, 
               osvi.dwBuildNumber);
    } else {
        fprintf(stderr, "Failed to get version info\n");
    }

    FreeLibrary(hNtdll);
    return 0;
}

编译命令:
gcc -o winversion winversion.c -lkernel32

说明:

  • 返回的版本号对应关系:
    • Windows 10/11: 10.0
    • Windows 8.1: 6.3
    • Windows 8: 6.2
    • Windows 7: 6.1
    • Windows Vista: 6.0

方法2:读取Cygwin的/proc/version文件

Cygwin模拟了Unix的proc文件系统,/proc/version文件中包含Windows系统版本信息,无需调用API,直接读取即可。

示例代码:

#include <stdio.h>
#include <string.h>

int main() {
    FILE* fp = fopen("/proc/version", "r");
    if (!fp) {
        fprintf(stderr, "Failed to open /proc/version\n");
        return 1;
    }

    char line[256];
    while (fgets(line, sizeof(line), fp)) {
        char* win_ver = strstr(line, "Windows");
        if (win_ver) {
            printf("Windows Version: %s", win_ver);
            break;
        }
    }

    fclose(fp);
    return 0;
}

编译命令:
gcc -o readversion readversion.c

说明:

  • /proc/version的内容格式类似CYGWIN_NT-10.0-WOW64 3.4.6(0.341/5/3) 2023-02-14 13:24 x86_64 Cygwin,其中NT-10.0对应Windows 10/11。

方法3:使用Cygwin内置的版本函数

Cygwin提供了cygwin_version函数,可直接获取其检测到的Windows版本号,代码最简洁。

示例代码:

#include <stdio.h>
#include <cygwin/version.h>

int main() {
    const cygwin_version_info_struct* info = cygwin_version();
    printf("Windows Version (Cygwin reported): %d.%d\n", 
           info->win_major, info->win_minor);
    return 0;
}

编译命令:
gcc -o cygwinver cygwinver.c

内容的提问来源于stack exchange,提问作者s_question

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 03:42:23