Windows:从 Cygwin 确定 C 语言中的操作系统版本

Windows: Determine OS version in C from Cygwin

提问人:s_question 提问时间:10/10/2023 更新时间:10/10/2023 访问量:77

问:

我有一些代码在 Cygwin 环境中运行,这使得 Windows 看起来像 Unix。 我想获取操作系统版本,但 Posix 函数调用 uname 不存在。 有没有其他方法可以以编程方式获取它? 我正在使用 GCC 编译器; 我没有安装任何 Microsoft 开发软件。

Windows WinAPI 操作系统 Cygwin

评论

1赞 Ben Voigt 10/10/2023
Cygwin 有一个用于 Windows API 头文件的包,因此您可以调用此处提到的任何函数:stackoverflow.com/questions/457872/...是的,即使有 gcc。#include <windows.h>
0赞 s_question 10/10/2023
我可以使用任何 #ifdef 来检查该包是否已加载?

答:

0赞 Philippe 10/10/2023 #1

试试这个:

#include <stdio.h>
#include <sys/utsname.h>

int main(int argc, char *argv[])
{
    struct utsname utsname;
    if (uname(&utsname) == 0) {
        printf("sysname = %s\n", utsname.sysname);
        printf("nodename = %s\n", utsname.nodename);
        printf("release = %s\n", utsname.release);
        printf("version = %s\n", utsname.version);
    #if __GNU_VISIBLE
        printf("domainname = %s\n", utsname.domainname);
    #else
        printf("domainname = %s\n", utsname.__domainname);
    #endif
    }
    return 0;
}

输出:

sysname = CYGWIN_NT-10.0-22621
nodename = hostname
release = 3.4.5-1.x86_64
version = 2023-01-19 19:09 UTC
domainname =

评论

0赞 IInspectable 10/10/2023
“试试这个”类型的答案几乎是无用的。答案需要提供的最低限度是确定问题并确认建议的解决方案如何解决问题。
0赞 s_question 10/10/2023
这就是我尝试过的,但缺少标头 sys/utsname.h。
0赞 Philippe 10/11/2023
@s_question 在 Cygwin 中,头文件 sys/utsname.h 是 cygwin 包本身的一部分。cygwin 包提供了提供 POSIX API 功能的基本 Cygwin 库。你能运行命令吗:find /usr/include -name utsname.h
0赞 s_question 10/11/2023
@Philippe 是的,我就是这么做的。它不见了。也许有人可以提醒维护者?我像往常一样选择从 vt.edu 下载,就像我多年来所做的那样。
0赞 Philippe 10/12/2023
您是否尝试过将cygwin安装在新目录中并查看是否存在?sys/utsname.h