1

使用しているプラ​​ットフォーム、つまり、プロセッサ、オペレーティング システム、およびオペレーティング システムのバージョンを確認する必要があります。私が現在持っている例はですi686-apple-darwin10。Linux と Windows で同様の文字列を取得するにはどうすればよいですか? autotools がその文字列を生成する検出スクリプトを提供していることは知っていますが、その名前は今思い出せません。bash にあるため、Windows では動作しません。

関連する質問は、プラットフォームを検出する手法を実際に理解する必要がなかったことです。これに対する基準はありますか?たとえば、「i686-apple-darwin10」は 1 つですが、「Linux-i386」というuname-スタイルも見ました。uname -p各プラットフォーム文字列のベスト プラクティス、標準文字列、優先コンテキストは何ですか?

4

6 に答える 6

3

GNU/Linux システムでは、 と の組み合わせが必要になる場合がありunameますlsb_release

あなたが得ることができるものの下uname

$ uname --help
使用法: uname [OPTION]...
特定のシステム情報を出力します。OPTION なし、-s と同じ。

  -a, --all すべての情報を次の順序で出力します。
                             ただし、不明な場合は -p と -i を省略します。
  -s, --kernel-name カーネル名を出力します
  -n, --nodename ネットワークノードのホスト名を出力します
  -r, --kernel-release カーネル リリースを出力します
  -v, --kernel-version カーネルのバージョンを出力します
  -m, --machine マシンのハードウェア名を出力します
  -p, --processor プロセッサのタイプまたは「不明」を出力します
  -i, --hardware-platform ハードウェア プラットフォームまたは「不明」を出力します。
  -o, --operating-system オペレーティング システムを出力します
      --help このヘルプを表示して終了
      --version バージョン情報を出力して終了

そして今lsb_release

$ lsb_release --help
使用法: lsb_release [オプション]

オプション:
  -h, --help このヘルプ メッセージを表示して終了します
  -v, --version このシステムがサポートする LSB モジュールを表示
  -i, --id ディストリビュータ ID を表示
  -d, --description このディストリビューションの説明を表示
  -r, --release このディストリビューションのリリース番号を表示
  -c, --codename このディストリビューションのコード名を表示
  -a, --all 上記の情報をすべて表示
  -s, --short 要求された情報を短い形式で表示
于 2009-09-18T21:01:11.633 に答える
2

開始点として、この検出で使用する言語を指定する必要があります。

「任意のコンピューターで実行でき、それを識別する単一のプログラムが必要」と指定した場合は、忘れてください。これは機能しません。プログラム ファイルはどのコンピュータでも実行できません。1 つのオプションは、「システム上に存在することが既にわかっているプログラムを使用する」ことですが、そのようなプログラムは 1 つとして普遍的に利用できるわけではありません。

に関して。プログラミング言語では、「スクリプト」と「コンパイル済み」のどちらかを選択できます (おそらく「バイトコードのコンパイル済み」が中間)。スクリプト言語では、インタープリターが既にシステム上にある場所、またはユーザーがスクリプトを実行する前に最初にインタープリターをインストールすることを受け入れることができる場所を選択する必要があります。そのため、Unix シェル スクリプトはシステムの識別に非常に広く使用されています。もちろん、それらは を提供するシステムに限定されます/bin/sh

コンパイル済み言語の場合、コンパイル時と実行時のシステム識別のどちらかを選択できます。コンパイル時間は C では非常に一般的であり、さまざまなコンパイラには定義済みのマクロがあり、コンパイラ、オペレーティング システム、またはマイクロプロセッサを識別するために使用できます。

実行時には、使用できるシステム コール/ライブラリ関数が必要です。どちらを使用できるかは、プログラミング言語によって異なります。

于 2009-09-18T20:50:55.567 に答える
1

これを行うための標準的なクロスプラットフォームの方法はなく、「標準」の文字列もありません。

Linux/UNIX の uname はいくつかの情報を取得しますが、通常は実行中のカーネルに関する情報のみで、プラットフォームに関する情報は得られません(Linux の場合、「オペレーティング システムのバージョン」とは何を意味しますか? カーネルのバージョン? OS のバージョン、たとえば RHEL 5.3? )。Windows では WMI に問い合わせることができますが、情報を提供するコマンドラインはありません。

于 2009-09-18T20:48:24.793 に答える
1

システムに存在する場合python(すべての主要なプラットフォームで利用可能):

import platform
print platform.platform()

出力:

Linux-2.6.28-15-generic-i686-with-Ubuntu-9.04-jaunty

于 2009-09-18T21:13:51.947 に答える
0

私がお手伝いできるのは Linux と Windows のみです。他の o/s についてはわかりませんが、おそらく *nixes は Linux と同じです。

バージョン: Windows: ver、Linux: uname -a

CPU: Linux では /proc/cpuinfo ファイルを使用し、Windows ではレジスタをチェックします (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI\ は Class=Processor のものを検索します)。

于 2009-09-18T20:57:45.283 に答える
-1

サイレント モードで dxdiag を実行すると、Windows に関するあらゆる種類の情報が得られます。

dxdiag /x outfile.xml

.xml ファイルが存在するのを待ちます。あらゆる種類の情報。

于 2009-09-18T20:49:27.613 に答える