0

(C++ プログラムを介して) システム モデル名を取得する必要があります。プラットフォームは AIX 5.3 です。基本的には「uname -M」コマンドと同じ情報を取得する必要があります。例: IBM、1234-E4A

uname() を使用してみましたが、この情報を取得できませんでした。

ヘルプ/提案をいただければ幸いです。

ありがとう

4

1 に答える 1

0

でこの情報を取得していないように見えることに驚いていますuname。を呼び出したときmachineの構造体のフィールドの内容は? それがあるべき場所です:utsnameuname

#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;
}
于 2012-08-14T03:30:14.607 に答える