Lacti's Archive

5 posts tagged with c

  • 프로그램 세그먼트

    May 21, 2011

    (리눅스 커널의 이해 개정 3판 810쪽) 유닉스 프로그램의 선형 주소 공간은 논리적인 관점으로 볼 때 몇 개의 선형 주소 구간으로 나뉘어있다 텍스트 세그먼트는 실행 코드를 포함하고, 초기화된 데이터 세그먼트는 초기화된 데이터, 즉 정적 변수(static variable)와 전역 변수(global variable…

  • typeof, container_of

    January 09, 2011

    gcc의 additional standard?라고 하는데 generics를 지원하기 위한 도구가 만능 void * 이외에 이런 것도 있었다. typeof 어떤 struct 내부 변수의 주소와 그 struct의 typename을 알 때, struct 변수의 시작 주소를 알아내는 container_of라는 매크로에 대해 동아리 친구와 잠깐 이야기했던 적이 있다. 간단히 설명하면 ((type *) NULL)->var…

  • 닫힌 descriptor와 write, SIGPIPE

    January 08, 2011

    예전에도 엄청 고생했던 것인데, socket이나 pipe 등에서 read와 write로 IO를 수행할 때 상대쪽(opposite endpoint)이 닫혔다면 어떤 현상이 벌어질까? read는 -1을 반환한다 write는 SIGPIPE를 받는다. 하지만 프로그램이 signal handler를 만들지 않았다면 그 프로그램은 죽는다. SIGTERM이나 SIGQUIT를 받은게 아니기 때문에 조용히 죽는다. send/recv…

  • 당연하지만 간과하는 size_t ssize_t

    January 08, 2011

    IO 함수를 사용함에 있어서 그 근간이 되는 것은 read와 write 함수이다. 이 함수는 모두 ssize_t를 반환하는데, 보통은 너무나 축복받은 환경에 있기 때문에 저게 왜 ssize_t 인지 모르는 경우가 많다. size_t는 size를 나타내기 위한 type으로 보통의 32bit machine에서는 32bit, 즉 unsigned int로 되어있다. 가장 유명한 sizeof…

  • 함수 값 반환 방법[어셈블리]

    October 18, 2009

    함수에서의 값 반환이 실제로 기계어 수준에서는 어떻게 이루어지는지 알아보자. 참고 assembly 정도는 알고 있어야 무얼 이야기하고자 하는지 알 수 있다. 아래의 코드들은 gcc((Debian 4.3.4-5) 4.3.4) + gdb(6.8.50.20090628-cvs-debian)인 curs-server에서 실험한 것이다. vs환경에서 해보면 좀 다를 것 같다. 본문 함수는 1-2 공전계 시간에 배우고, 함수 호출 원리는…