0

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

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

任何帮助/建议表示赞赏。

谢谢

4

1 回答 1

0

我很惊讶您似乎没有通过uname. 调用时结构中machine字段的内容是什么?这就是它应该在的地方:utsnameuname

#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 的 doco,他们的处理machine方式略有不同。

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

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


作为最后的手段,你总是可以做一些笨拙的事情system ("uname -M >/tmp/myfile"); ,然后读入myfile标准的 CI/O 东西。

然而,尽管这可能是标准 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;
}
于 2012-08-14T03:30:14.607 回答