我需要(通过 C++ 程序)获取系统型号名称。平台是 AIX 5.3。基本上我需要获得与“uname -M”命令相同的信息。例如 IBM,1234-E4A
我尝试使用 uname() 但无法获取此信息。
任何帮助/建议表示赞赏。
谢谢
我很惊讶您似乎没有通过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 而不是机器类型。
作为最后的手段,你总是可以做一些笨拙的事情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;
}