초짜 프로그래밍 리눅스에서 궁금한점..들..

gangyu의 이미지

우선 봐주셔서 감사하고 도와주셔서 감사합니다...!!!

먼저 1. 0x0002F2D5 <-이런거 어떻게 보는거여요?
^^;

2. 구조체 선언한것들 보면 어떤거는
struct tree{

int a;
char b;

} apple __attribute__ ((packed))

이런 식으로 되어 있던데 뒤에__attribute__ ((packed))는 무엇을 의미하는 걸까요?

3. #define info(format, arg...) printk(KERN_INFO __FILE__ ": " format "\n" , ## arg)
이런 구문은 어떻게 해석해야되요? ##은 머고 __FILE__는 모고...참^^;

4. #define BUG() __bug(__FILE__, __LINE__ , NULL);
이와 같이 디파인 문이 정의 되어 있는데..
extern void __bug (const char *fiel, int line , void *data); 외부에 아님 다른 곳에 위와 같은 함수가 정의 되어있다면 이건 어떻게 사용하는 건가요?
BUG()를 호출하면 디파인 문에 정의된__bug(...~)함수가 호출되는 건가요? 그럼 인자는 어떻게 넣어주나요...2개가 다른 건가요?
궁금...미챠....~^^;]

5. Int atomic_add_negative(volatile atomic_t *v)
함수가 있을때 v는 구조체 포인터 변수에요
atomic_t 구조체에는counter이라는 int 변수가 있거든요..그럼
Int result 변수 , 밑에
Result = (v ->counter ==0); result에 값이 머가 들어 가나요
v->가르키는 곳에 counter이 0과 같으면 참이니까 1이 들어가나요?맞아요? 궁금.^^;

hie의 이미지

1. Physical Address

2. Memory Allignment
기억이 가물가물한데.. 암튼 사용했던 컴파일러가 저 옵션이
안 먹어서 대신 progma를 사용했었는데.. ㅡ.ㅡ;;

3. 파일명 찍은 후에 님께서 넣은 문자열 찍어요

4. BUG는 커널에서 Pre-define 해서 사용하지 않나요??
만약 다른 곳에서 디파인 되어 있는 것을 또 디파인 하면
뤼디파인 에러 발생. 이럴때 대피해서 ifndef 를 사용해주는
센스~~

5. 당연히 참이면 1이 할당..

dasomoli의 이미지

1. C 언어에서의 16진수와 8진수 표기법을 찾아보세요.

2. "__attribute__ ((packed))" 를 검색어로 구글에서 찾아보세요. 한국어 검색으로 찾으셔도 나옵니다.

3. ## 은 C 언어 교재의 전처리기 부분이나 구글로 웹에서 찾아보세요. "__FILE__" 을 검색어로 구글에서 찾아보세요.

4. 역시 전처리기 부분, 함수 부분, 그리고 extern 키워드에 관해서 찾아보세요. "__LINE__" 에 관해서 모르겠다면 역시 구글에서 찾아보세요.

5. C 언어의 연산자 "==" 에 대해서 찾아보세요. 연산자들이 어떤 값을 돌려주는지를 보시면 될겁니다.



dasomoli의 블로그(http://dasomoli.org)
dasomoli = DasomOLI = Dasom + DOLI = 다솜돌이
다솜 = 사랑하옴의 옛 고어.
Developer! ubuntu-ko! 다솜돌이 정석
marantz의 이미지

1번에 대한 궁금증을 많은 분들이 호소하시죠. ^^;

Hex Binary 로 Bitmap Image 까지 머리로 상상하셔서 찾아내시는 분들이 계시기까지 하니 그분들의 프로그래밍 경력은 굳이 따지지 않아도....쿨럭...

우선 Digit 개념에 대해 많이 살펴 보시구요. Hex/Bin/Dec 변환하는 함수을 만들어 보세요.

Too Many Sceret is in your heart.
We must break it and don't forget it.
Until no more secret remains in your soul

lifthrasiir의 이미지

1. 메모리 주소일 가능성이 높습니다. 적어도 16진수가 뭔지는 아셔야 할 것이고, 자세한 사항은 구글링하시는 게 좋겠네요.

2. 위의 분들께서 말씀하신 것처럼 구조체가 메모리 상에 들어 갈 때 alignment를 지정하는 방법입니다.
일반적으로 효율성을 위해서 2, 4, 8바이트(등등) 단위로 배치하곤 하는데, 예를 들어서 4바이트 alignment라면 1바이트짜리 char 변수 두 개가 있는 구조체라도 4바이트마다 변수 하나씩 지정해서, 3바이트를 낭비하는 대신 속도를 높이는 방식입니다. (2의 거듭제곱인 게 다 이유가 있습니다)
하지만 파일을 처리한다거나 하면 이러한 "공백"들이 문제가 되는 경우가 대부분이기 때문에 이러한 특수한 방법을 사용하여 alignment 방법을 변경하는 것입니다. C 표준에서 alignment를 지정하는 방법은 없고, 보여 주신 내용은 최소한의 alignment를 사용하게 하는 GNU extension이네요. MSVC++ 같은 경우 #pragma를 사용합니다.

3. __FILE__은 그 내용이 들어 있는 파일 이름(문자열)로 치환되고, 비슷하게 __LINE__은 그 내용이 들어 있는 파일의 줄 번호로 치환됩니다. ##는 원래는 두 개의 토큰을 공백 없이 잇는 방법입니다. (예를 들어서 one ## two는 onetwo와 같은 의미가 됩니다)
...하지만, 보여 주신 코드의 경우 arg 뒤에 ...가 붙어 있기 때문에 arg는 variable argument라고 해서 0개 이상의 인자를 함께 받을 수 있게 됩니다. (사실 이것도 GCC extension이고 표준에서는 ...라고만 쓴 뒤에 __VA_ARGS__라고 써야 합니다) 예를 들어서 다음과 같이 매크로가 정의되어 있을 때,
#define info(format, args...) printf(format, args)
info("%d-th %s", 42, "thought") 라고 하면 args에는 42, "thought"가 치환됩니다. 문제는 info("blahblah")라고 써서 variable argument에 아무 것도 들어 가지 않을 경우인데, 이 경우 printf("blahblah", )가 되면서 콤마가 하나 남게 됩니다. GCC에서는 이런 상황을 방지하기 위해서 variable argument 앞에 ##가 붙고, 그 argument가 비어 있을 경우 그 앞의 ,를 지워 주는 extension을 제공합니다.
혹시 궁금하시다면 gcc -E blah.c 와 같이 해서 전처리 후에 매크로가 어떻게 치환되는 지 확인해 보시는 것이 좋겠습니다.

4. BUG()는 __bug(__FILE__, __LINE__, NULL)로 치환되고 앞에서 말한 대로 __FILE__과 __LINE__은 적당한 내용으로 바뀝니다. 그냥 BUG() 해 주면 __bug("blah.c", 42, NULL) 같이 치환된다고 생각하시면 되겠습니다. 자세한 것은 매크로 부분을 잘 읽어 보시길 바랍니다.

5. 맞아요 :)

- 토끼군

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.