2011-12-21 3 views

答えて

2

ここで道の不正行為の一種です:

#if defined(__i386__) 
    return "i386"; 
#elif defined(__x86_64__) 
    return "x86-64"; 
#elif defined(__arm__) 
    return "arm"; 
// etc... 
#else 
# error "Unknown architecture!" 
#endif 

各アーキテクチャ用に別の実行可能イメージがありますように、それが実行時にチェックするために、厳密には必要ありません。 man 2 unameから

+0

'__foo__'の使用は、コンパイラやライブラリの使用のために予約された識別子の定義によって、異なるコンパイラ間で移植可能ではありません。 – moshbear

+1

これはgccとclangで動作しますが、これはOS Xで最も実用的な目的には十分です。 – duskwuff

0

#include <sys/utsname.h> 

    int uname(struct utsname *buf); 

    uname() returns system information in the structure pointed to by buf. 
    The utsname struct is defined in 
    <sys/utsname.h>: 

     struct utsname { 
      char sysname[]; /* Operating system name (e.g., "Linux") */ 
      char nodename[]; /* Name within "some implementation-defined 
           network" */ 
      char release[]; /* OS release (e.g., "2.6.28") */ 
      char version[]; /* OS version */ 
      char machine[]; /* Hardware identifier */ 
     }; 

    The length of the arrays in a struct utsname is unspecified; 
    the fields are terminated by a null byte ('\0'). 

ヒント:(struct utsname).machineを返す-m のuname。

関連する問題