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를 이용하라규
기본에 충실하고 있슴미.. 진도 참 안나간다.
눈만 잘보였어도..
프로그램의 종지 상태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 |