리눅스 프로그래밍에서 32비트인지 64비트인지 어떤 방식으로 구분을 하나요?

ukyoukyo의 이미지


32비트와 64비트 둘다 만족시켜야하는 환경에서 일해서요.

저는 uname() 함수로 string 읽어와서 32비트냐 64비트냐 구분을 하고 있습니다만...

다른 분들은 어떤 방식으로 OS arch'를 구분하는지요?

pastime의 이미지

sizeof(long) == 8 ?

bushi의 이미지

[bushi@rose wsegl_android]$ getconf LONG_BIT
32
[bushi@rose wsegl_android]$

SYSCONF(3)                 Linux Programmer’s Manual                SYSCONF(3)
 
NAME
       sysconf - Get configuration information at runtime
 
SYNOPSIS
       #include <unistd.h>
 
       long sysconf(int name);
 
DESCRIPTION
       POSIX allows an application to test at compile or run time whether cer-
       tain options are supported, or what the value  is  of  certain  config-
       urable constants or limits.
...

OTL

clique의 이미지

getrlimit(...RLIMIT_AS...)

ukyoukyo의 이미지


조언 해주신 세분께 감사드립니다.

근데, sysconf()에는 LONG_BIT를 쓰지 못하더군요.

우분투 64비트에서 우선 테스트 해보았습니다만...

그리고, 구글링하다 찾은건데 아래와 같은 방법도 있더군요.

limit.h에 정의된 '__WORDSIZE'를 참조하는 방법입니다.

#include [limits.h] // 꺽쇠 기호는 []로 바꾸었습니다^^
 
#if ( __WORDSIZE == 64 )
    #define bit 64
#elif ( __WORDSIZE == 32 )
    #define bit 32
#else
    #error Platform of system is NOT 64 or 32 bits
#endif

또 다른 방법이 있다면, 조언을 부탁드립니다...

------------------ System programmer...^^


------------------ System programmer...^^

bushi의 이미지

man 페이지 띄엄띄엄 보셨군요.
sysconf() 에선 _SC_ 라는 prefix 를 붙여서 사용합니다. 중복정의 방지목적입니다.
_SC_LONG_BIT 죠.

추가.

본문에 쓰신 걸로 보면 런타임에 알아내서 적절하게 동작해야하는 것 같은데...
아래 위의 댓글에 쓰신 걸로 보면 컴파일타임이네요 ?

OTL

ukyoukyo의 이미지


예, 좀 띄엄띄엄 봤네요.

sysconf()는 자주 썼던 함수인데... 당연히 _SC..^^

질문과 댓글의 의도는 다른건 아니고

제 표현력 문제로 이해해 주시믄 감사하겠습니다^^

------------------ System programmer...^^


------------------ System programmer...^^

markboy의 이미지

gcc를 사용하신다면 아래 define 중 하나라도 있으면 64bit 시스템으로 보면 될 것 같은데요?

__alpha__
__ia64__
__ppc64__
__s390x__
__x86_64__

#include <stdio.h>
 
int main(int argc, char **argv)
{
#if defined(__alpha__) || defined(__ia64__) || defined(__ppc64__) || defined(__s390x__) || defined(__x86_64__)
    printf("64\n");
#else
    printf("32\n");
#endif
}
superkkt의 이미지

pre-defined macro를 사용해서 하신다면 아래 사이트도 참조해보세요..

http://predef.sourceforge.net/prearch.html

======================
BLOG : http://superkkt.com

======================
BLOG : http://superkkt.com

ukyoukyo의 이미지


도움주셔서 감사합니다.

많은 도움이 되었습니다^^

------------------ System programmer...^^


------------------ System programmer...^^

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.