구)홈페이지 오탈자 보기
유닉스 리눅스 프로그래밍 필수 유틸리티: vi, make, gcc, gdb, cvs, rpm

 

페이지오탈자 내용등록일
129

(29쪽 가운데 문단 두번째 줄)

정지되는 지점 없어
 ==>
정지되는 지점이 없어,

2007-08-154
40

((p. 40) 마지막 문단 두번째 줄)

관리가 용의하지 않다는
==>
관리가 용이하지 않다는

2006-10-251
63

(p 63 그림2-2 모드 전환)

명령모드와 입력모드 사이의 화살표 방향
==>
명령모드와 입력모드 사이의 화살표가 반대 방향입니다.

2006-10-251
88

(p 88 첫번재 박스)

int( | |
)+var;
==>
int( | |
)+var

2006-10-251
119

((p 119) 예제 2-5)

rm -rf cscope.files cscope.files
==>
rm -rf cscope.out cscope.files

2006-10-251
143

(p 143 마지막 문장.)

set path=/usr/include:/usr/src/linux/include
==>
set path=/usr/inclue,/usr/src/linux/iinclude

2006-10-251
158

((p 158) 첫번째 코드 블럭)

gcc -g like like.c
==>
gcc -g -o like like.c

2006-10-251
164

((p. 164) 네번째 문단 7째줄)

collect2: 링크  

그림 3-5에서 링크
==>
collect2: 링커 

그림 3-5에서 링커


링크(link)는 오브젝트 코드(들)에서 실행 파일을 만드는 동작을 나타내는 동사이고,  링커(linker)는 링크를 하는 프로그램이므로 링커가 정확한 표현.

2006-10-251
172

((p 172) 첫번째 문단 둘째줄)

[그림3-12]는 /usr/src/stdio.h 파일의 내용인데
==>
[그림3-12]는 /usr/include/stdio.h 파일의 내용인데

2006-10-251
178

((p 178) 네번째 문단)

목적 코드 최적화중에서
레지스트
==>
레지스터

2006-10-251
180

((p 180) 두번째 문단 첫째줄)

실행파일을 만든다던지 또는 실행 화일을 실행시킬 때 링크나
로드에게 정보를 제공해야만 링크하고 로드하여 실행할 수 있을 것이다.
==>
실행파일을 만든다던지 또는 실행 화일을 실행시킬 때 링커(linker)나 로더(loader)에게 정보를 제공해야만 링크하고 로드하여 실행할 수 있을 것이다.


링킹를 수행하는 프로그램:링커
로딩을 수행하는 프로그램:로더

2006-10-251
228

((p 228-235))

228-235페이지에서 
레지스트라고 된 표현은 전부 레지스터로 바꾸어야 함.
==>
레지스트라고 된 표현은 전부 레지스터로 바꾸어야 함.

2006-10-251
251

(p. 251-252)

si, ni 설명에 대하여 다음과 같은 내용을 보완하면 s,n명령과 si, ni명령과의 차이점을 명확히 전달할 수 있을것 같음.

s 또는 n 명령어는 소스프로그램의 행 단위에서 진행하는 명령어이며, 즉 C 프로그램 한문장 진행하는 명령어이다. si 또는 ni는 어셈블리 인스트럭션 레벨에서 한 인스트럭션씩 진행하는 명령이다.

가령  다음과 같은 문장은
printf("array[i] = %s
", array[i]);

s또는 n명령어의 입장에서 본다면 하나의 행이지만, 어셈블리 인스트럭션 수준에서 보면 4개의 인스트럭션들로 구성되어 있다. 즉, 위 문장은 s 또는 n명령어 한번에 진행이 되지만, si 또는 ni명령어를 사용한다면 4번 실행하여야 한 문장이 진행한다.

요약하면 s또는 n명령어는 진행 단위가 소스 프로그램 언어 수준에서의 한 문장을 대상으로 하며, si또는 ni명령어는 는 소스 프로그램 언어 수준에서의 한 문장에 대응하는 어셈블리 인스트럭션(들)을 대상으로 한다는 차이점이 있다.
==>
확인완료

2006-10-251
270

(p. 270 그림 4-32 다음 문단)

.... [예제 4-5]에서
==>
.... [예제 4-6]에서

2006-10-251
285

(p.285 하단)

디버깅시 코어 파일만 사용하지 않고 bugprg프로그램을 같이 디버깅하는 이유에 대한 설명이 논리적이지 않음.

밑에서 2번째 3번째 문단은 burgprog프로그램에 디버깅 정보가 없는 것 처럼 기술되다가, 밑에서 1번째 문단에서는 코어 파일에 디버깅 정보가 없다라고 기술되고 있다.

실제 디버깅 정보는 bugprog파일에 있으므로 밑에서 2번째 3번째 문단 내용 기술은 논리적인 면에서 수정이 필요하다.
==>
코어 파일 뒤에 오는 숫자는 코어 파일을 남긴 프로세스의 PID로써 필자와 같지 않을 것이다. 코어 파일만 디버깅에 이용하지 않고 bugprg 프로그램을 같이 디버깅에 사용하는 이유는 다음과 같다. 
./bugprg 명령을 셸에서 내리게 되면 셸이 fork하여 자식 프로세스를 생성한다. 자식 프로세스는 evecve 시스템 콜을 호출하는데 인자를 bugprg 프로그램의 패스를 가지고 호출한다. 
그러면 커널은 bugprg 프로그램을 자식 프로세스의 메모리 공간에 읽어들인다. bugprg는 elf 포맷의 실행 이미지로써 여러 가지 정보가 들어있는데, 그 중에 프로그램 수행에 꼭 필요한 code와 data만 메모리에 로드하게 된다. 커널은 환경 변수를 bugprg 프로그램의 태스크에 push하는 등과 같은 여러 자잘한 초기화 작업을 수행한 후 메모리에 로드한 bugprg를 실행하게 된다. 
커널은 bugprg 프로그램을 자식 프로세스의 메모리 공간에 읽어들일 때 bugprg라는 elf 이미지에 있는 여러 정보 중에서 프로그램 수행에 꼭 필요한 code와 data만을 메모리에 로드하기 때문에 디버깅 정보와 같은 것들은 메모리에 로드되지 않는다.
코어 파일은 프로그램에 문제가 발생했을 때 커널이 수행 중인 프로그램의 이미지를 파일로 만든 것으로써 메모리와 레지스터, 스택의 정보들로 구성되어 있다. 또한 코어 파일은 커널이 메모리에 로드하여 수행 중인 프로그램 이미지이기 때문에 애초부터 디버깅 정보를 메모리에 로드하지 않았음으로 코어 파일에는 디버깅을 위한 정보가 들어있지 않다. 때문에 코어 파일 디버깅을 위해서는 코어 파일과 함께 디버깅 정보가 있는 bugprg elf 포맷의 실행 파일도 함께 사용되는 것이다.

2006-10-251
345

(p. 345 13째줄, 15째줄)

13째줄
- 내부 확장자 규칙에 따라 memo.o를 만드는데 사용할 수 있어야 한다. [표 5-2]를 보면......

==>
- 내부 확장자 규칙에 따라 memo.o를 만드는데 사용할 수 있어야 한다. [예제 5-8]를 보면......


15째줄
내부 정의 확장자 규칙의 명령어([표 5-2]에서는 .....

==>
내부 정의 확장자 규칙의 명령어([예제 5-8]에서는 .....
==>
13째줄
- 내부 확장자 규칙에 따라 memo.o를 만드는데 사용할 수 있어야 한다. [예제 5-8]를 보면......


15째줄
내부 정의 확장자 규칙의 명령어([예제 5-8]에서는 .....

2006-10-251
354

((p 354) 예제 5-17)

예제 5-17 다음과 같이 변경합니다
==>
===============================

OBJECTS = memo.o calendar.o main.o

all: MEMO 
        CALENDAR 
        MAIN 
        diary

MEMO :
        cd memo && make

CALENDAR:
        cd calendar && make

MAIN:
        cd main && make

diary: $(OBJECTS)
        $(CC) -o $@ $^

clean:
        cd memo && make clean
        cd calendar && make clean
        cd main && make clean
        -rm -fr *.o diary

=================================

2006-10-251
355

(p 355 예제 5-18 마지막 줄)

rm -rf $(TARGET)
==>
-rm -rf *.o $(TARGET)

2006-10-251
362

(p. 362 6째줄, 7째줄)

6째줄 subst함수의 박스 설명

$(subst 찾을 문자, 변경할 문자, 목표 문자)


7째줄 설명도 변경이 필요

subst 함수는 목표 문자에서 찾을 문자를 발견하면 변경할 문자로 치환한다.
==>
6째줄 subst함수의 박스 설명

$(subst 찾을 문자열, 변경 문자열, 목표 문자열)


7째줄 설명도 변경이 필요

subst 함수는 목표 문자열에서 찾을 문자열를 발견하면 변경할 문자열로 치환한다.

2006-10-251
402

(p. 402 1째줄 및 관련 페이지)

첫번째줄 함수 처크 매크로가  다음과 같이 ⑥으로 시작하고 
있는데,
⑥ 함수체크 매크로

함수 체크 처리 매크로 설명은 
p. 389에서
⑤ 사용 가능한 매크로
로 시작한 내용의 일부이므로 새로이 번호를 ⑥으로 부여한 것은
책 논리적 구조상 이상함.

따라서 p.402  1째줄은
⑥ 함수체크 매크로 ==> 함수체크 매크로

로 변경하는 것이 좋을 듯하며, 이에 따라서

p. 409
⑦ 보다 세밀한 제어를 위한 configure.ac작성
==>
⑥ 보다 세밀한 제어를 위한 configure.ac작성

p. 413
⑧ 설정헤더를 사용하여 소스파일에 설정 적용
==>
⑦ 설정헤더를 사용하여 소스파일에 설정 적용

로 변경하여야 한다.
==>
첫번째줄 함수 처크 매크로가  다음과 같이 ⑥으로 시작하고 
있는데,
⑥ 함수체크 매크로

함수 체크 처리 매크로 설명은 
p. 389에서
⑤ 사용 가능한 매크로
로 시작한 내용의 일부이므로 새로이 번호를 ⑥으로 부여한 것은
책 논리적 구조상 이상함.

따라서 p.402  1째줄은
⑥ 함수체크 매크로 ==> 함수체크 매크로

로 변경하는 것이 좋을 듯하며, 이에 따라서

p. 409
⑦ 보다 세밀한 제어를 위한 configure.ac작성
==>
⑥ 보다 세밀한 제어를 위한 configure.ac작성

p. 413
⑧ 설정헤더를 사용하여 소스파일에 설정 적용
==>
⑦ 설정헤더를 사용하여 소스파일에 설정 적용

로 변경하여야 한다.

2006-10-251
410

(p. 410 하단 박스 소스중)

cat kerneldir.h 2> /dev/nulll 의 앞뒤에 `(grave accent)
가 빠져 있음.


if test -f "kerneldir.h"; then
         KERNEL_DIR= cat kerneldir.h 2> /dev/null
else
==>
if test -f "kerneldir.h"; then
         KERNEL_DIR= `cat kerneldir.h 2> /dev/null`
else

2006-10-251
411

(p. 411의 소스 설명에서도)

세개의 박스 설명 모두에서도

 cat kerneldir.h 2> /dev/nulll 의 앞뒤에 `(grave accent)
가 빠져 있음.

     KERNEL_DIR= cat kerneldir.h 2> /dev/null
else
==>
KERNEL_DIR= `cat kerneldir.h 2> /dev/null`
else

2006-10-251
413

((p 413) 첫번째 문단 셋째줄)

메시지를 확인하는 것이 용의하지 않다는
==>
메시지를 확인하는 것이 용이하지 않다는

2006-10-251
419

(p. 419 그림 캡션)

[그림 6-66]
==>
[그림 5-66]

2006-10-251
5420

([예제 5.43] Makefile.am 파일의 내용)

like_SOURECS = like.c
==>
like_SOURCES = like.c

2011-02-061
425

((p 425) 두번째 항목(LIBRARIES:))

EXTRA_PROGRAMS = hello1 hello2
==>
EXTRA_LIBRARIES = libhello1.a libhello2.a

2006-10-251
427

(p. 427 예제 5-46중)

AC_CONFIG_FILES( [Makefile
                              calendar/Makefile
                              db/Makefile
                              memo/Makefile])
==>
db/Makefile이 아니라 main/Makefile로 고쳐야 함.


AC_CONFIG_FILES( [Makefile
                              calendar/Makefile
                              main/Makefile
                              memo/Makefile])

2006-10-251
448

(p.448 3번째 문단.)

...... 시스템 계정을 이용하여 rsh나 ssh를 이용하여 CVS서버에 접근하는 방법은 나중에 다루겠다. .......
==>
...... 시스템 계정을 이용하여 rsh나 ssh를 이용하여 CVS서버에 접근하는 방법은 CVS 설명서를 참조하기 바란다. .......

2006-10-251
498

(p. 498 매크로 정의 부분 설명)

매크로 정의 부분 설명중 2째줄

면 spec 파일이 내부에서 ...


매크로 정의 부분 설명중 4째줄

된 부분은 보두 0.0.1로 ....
==>
매크로 정의 부분 설명중 2째줄

면 spec 파일의 내부에서 ...


매크로 정의 부분 설명중 4째줄

된 부분은 모두 0.0.1로 ....

2006-10-251