システムに関する情報を取得する関数を作成する必要があります (最も重要な情報はアーキテクチャです)。sys/utsname.hを含めて使用できる関数unameを見つけました。さて、ググってドキュメントを読んでも、関数の例が見つからず、unameの使い方がわかりません。誰でも使い方を説明できますか?例も書いていただけると助かります。前もって感謝します。
32029 次
4 に答える
27
まず、ヘッダーを含めます。
#include <sys/utsname.h>
次に、utsname 構造体を定義します。
struct utsname unameData;
次に、構造体へのポインタを指定して uname() を呼び出します。
uname(&unameData); // Might check return value here (non-0 = failure)
この後、構造体には必要な情報が含まれます。
printf("%s", unameData.sysname);
http://opengroup.org/onlinepubs/007908775/xsh/sysutsname.h.html
于 2010-08-29T19:53:15.317 に答える
21
完全に機能する例は、千の言葉に値します。;-)
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/utsname.h>
int main(void) {
struct utsname buffer;
errno = 0;
if (uname(&buffer) < 0) {
perror("uname");
exit(EXIT_FAILURE);
}
printf("system name = %s\n", buffer.sysname);
printf("node name = %s\n", buffer.nodename);
printf("release = %s\n", buffer.release);
printf("version = %s\n", buffer.version);
printf("machine = %s\n", buffer.machine);
#ifdef _GNU_SOURCE
printf("domain name = %s\n", buffer.domainname);
#endif
return EXIT_SUCCESS;
}
于 2014-12-24T16:01:11.987 に答える
9
ドキュメントから、次のように使用するように見えます。
struct utsname my_uname;
if(uname(&my_uname) == -1)
printf("uname call failed!");
else
printf("System name: %s\nNodename:%s\nRelease:%s\nVersion:%s\nMachine:%s\n",
my_uname.sysname, my_uname.nodename, my_uname.release,my_uname.version,my_uname.machine);
于 2010-08-29T19:54:41.660 に答える
6
この関数は、結果を入力として格納する構造体uname()
へのポインターを受け取ります。utsname
したがって、一時的なutsname
インスタンスを作成し、そのアドレスを に渡し、uname
関数が成功した後にこの構造体の内容を読み取るだけです。
struct utsname retval;
if(uname(&retval) < 0) { // <----
perror("Failed to uname");
// error handling...
} else {
printf("System name = %s\n", retval.sysname);
// print other info....
// see http://www.opengroup.org/onlinepubs/009695399/basedefs/sys/utsname.h.html
// for other members...
}
于 2010-08-29T19:52:04.353 に答える