我需要(通过C ++程序)获取系统模型名称。平台是AIX 5.3。基本上我需要获得与“uname -M”命令相同的信息。例如IBM,1234-E4A
我尝试使用uname()但无法获取此信息。
任何帮助/建议表示赞赏。
由于
答案 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;
}