【问题标题】:Getting system model name using C++ on AIX在 AIX 上使用 C++ 获取系统模型名称
【发布时间】:2012-08-15 13:20:45
【问题描述】:

我需要(通过 C++ 程序)获取系统型号名称。平台是 AIX 5.3。基本上我需要获得与“uname -M”命令相同的信息。例如IBM,1234-E4A

我尝试使用 uname() 但无法获取此信息。

感谢任何帮助/建议。

谢谢

【问题讨论】:

    标签: c++ aix


    【解决方案1】:

    我很惊讶您似乎没有通过uname 获得此信息。调用uname时,utsname结构中machine字段的内容是什么?这就是它应该在的地方:

    #include <stdio.h>
    #include <errno.h>
    #include <sys/utsname.h>
    int main (void) {
        struct utsname uts;
        if (uname (&uts) == -1)
            printf ("Error, errno = %d\n", errno);
        else
            printf ("%s\n", uts.machine);
        return 0;
    }
    

    实际上,根据 IBM 的文档,他们对待 machine 略有不同。

    subroutine uname utsname.machine:32 位唯一系统标识符,以十六进制字符串表示,例如“0123454C”。

    所以这是系统 ID 而不是机器类型。


    作为最后的手段,你总是可以做 kludgy system ("uname -M &gt;/tmp/myfile"); 然后用标准的 C I/O 读入myfile

    然而,尽管这可能是标准 C 所必需的,但我们可以在 AIX 中做得更好,因为我们可以使用 popen。这允许我们运行命令并检查其输出而无需创建和读取临时文件。

    类似这样的:

    #include <stdio.h>
    int main (void) {
        int ch;
        FILE *fin = popen ("uname -M", "r");
        if (fin != NULL) {
            while ((ch = fgetc (fin)) != EOF) {
                putchar (ch);
            }
            fclose (fin);
        }
        return 0;
    }
    

    【讨论】:

    • 啊。用 popen 大声喊叫。
    • @Charlie,也许你应该在评论之前阅读 whole 答案:-) 但我会不强调临时文件位。
    • .machine 给了我类似 this machine = '000682C2D900';
    • @ababeel,我怀疑不是。但是,我会使用 popen 而不是系统一。
    猜你喜欢
    • 2015-05-25
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 2018-11-12
    • 2020-07-12
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多