APUE 7장 연습문제

2009. 11. 27. 10:30
연습문제 7.1) linux 에서 "hello, world"를 출력하고 exit 호출이나 return 문이 없을때
프로그램의 종지 상태echo $? 을 쳐보면 13인 것을 알수 있다. 왜그럴까.

Answer) printf의 반환값이 (출력한 문자 개수) main의 반환값이 된것으로 보인다. 
모든 시스템이 이런 행동을 보이는 것은 아니다.

7.3) main 이 어떤 함수를 호출한다고 하자.
a) main 이 그 함수에게 argc와 argv를 넘겨주지 않거나
b) main이 argc와 argv를 전역 변수로 복사하지 않았다고 해도,
그 함수가 명령줄 인수들에 접근하는 것이 가능할까?

Answer) 대부분의 UNIX 시스템들에서, 이는 붕가능하다.
environ 등과는 달리 argc와 argv의 복사본을 어떤 전역 변수들에 담아두지는 않기 때문이다.

아~ 그렇구나~.

7.4) 일부 UNIX 시스템 구현들은 프로그램 실행 시 자료 구역의 0번 위치에
프로세스가 접근하지 못하도록 메모리를 적절히 배치한다. 왜 그럴까?

Answer) 프로세스가 널 포인터를 역참조 해서 프로세스를 종료시키기 위한 것이다.

이건 뭔소리여..

7.7) size 명령의 출력에서 힙과 스택의 크기가 표시되지 않은 이유는 무엇일까?

Answer) exec류 함수들 중 하나로 프로그램이 실행되기 전까지는 할당되지 않는다.

7.10) 함수가 자신의 자동 변수를 가리키는 포인터를 돌려주어서는 안된다는 점을
이야기 한다. 아래 코드에는 문제가 없을까?

int f1(int val)
{
int *ptr;
             if ( val == 0 ) {
                    int val;
                    val = 5;
                    ptr = &val;
              }
              return (*ptr + 1);
}

Answer) 자동 정수 변수 val이 더 이상 존재하지 않게 된 후에도 포인터를 통해서 그 변수를
             참조한다는 문제를 가지고 있다. 하나의 복합문을 사랑하는 왼쪽 꺾음 괄호 이후에
             선언된 자동 변수는 해당 오른쪽 꺾음 괄호까지만 존재하고 그 이후에는 존재하지 않는다.

스택에 쓰면 이런 문제가 있으니깐..  static, extern 또는 malloc를 이용하라규

기본에 충실하고 있슴미.. 진도 참 안나간다.
눈만 잘보였어도..
                    






'OS > Linux' 카테고리의 다른 글

redhat 9.0 networking problem in vmware  (0) 2010.06.20
about Signal  (0) 2009.12.09
Advanced Programming in the Unix Environment  (0) 2009.12.02
codegate 2009. hamburger  (0) 2009.08.14
linux socket source  (0) 2009.08.05
binary analysis in linux box without symbol  (0) 2009.06.15

badcob OS/Linux