【发布时间】:2012-08-15 13:20:45
【问题描述】:
我需要(通过 C++ 程序)获取系统型号名称。平台是 AIX 5.3。基本上我需要获得与“uname -M”命令相同的信息。例如IBM,1234-E4A
我尝试使用 uname() 但无法获取此信息。
感谢任何帮助/建议。
谢谢
【问题讨论】:
我需要(通过 C++ 程序)获取系统型号名称。平台是 AIX 5.3。基本上我需要获得与“uname -M”命令相同的信息。例如IBM,1234-E4A
我尝试使用 uname() 但无法获取此信息。
感谢任何帮助/建议。
谢谢
【问题讨论】:
我很惊讶您似乎没有通过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 >/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;
}
【讨论】: