在AIX上使用C ++获取系统模型名称

时间:2012-08-14 03:27:10

标签: c++ aix

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

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

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

由于

1 个答案:

答案 0 :(得分:0)

我很惊讶您似乎没有通过uname获取此信息。致电machine时,utsname结构中uname字段的内容是什么?应该是这样的地方:

#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而不是机器类型。


作为最后的手段,你可以随时使用kludgy system ("uname -M >/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;
}