(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
: 「0123454C」などの 16 進文字列として表される 32 ビットの一意のシステム ID。
つまり、これはマシン タイプではなくシステム ID です。
最後の手段として、いつでも面倒な作業を行ってから、標準の CI/O を使用してsystem ("uname -M >/tmp/myfile");
読み取ることができます。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;
}