본문 바로가기

오탈자 정보

[사물인터넷을 위한 리눅스 프로그래밍 with 라즈베리 파이(전면개정판)]_오탈자

현재까지 발견된 위 책의 오탈자 정보와 오류, 그리고 보다 매끄러운 문장을 위해 수정한 내용을 알려드리며, 아울러 집필과 편집 시에 미처 확인하지 못하고 불편을 끼쳐 죄송하다는 말씀을 드립니다. 아래의 오탈자 사항은 추후 재쇄 시에 반영하도록 하겠습니다. 

이외의 오탈자 정보를 발견하시면 도서 커뮤니티(http://www.facebook.com/groups/LinuxProgrammingWithRaspberryPi)나 출판사(help@jpub.kr)로 연락을 주시면 고맙겠습니다.

 

최종수정일자: 2022년 2월 10일
1~3쇄본 오탈자

7쪽  1-1의 라즈베리 파이 가격과 메모리

$35/$45/$55 ==> $35/$55/$75

1GB/2Gb/4GB ==> 2GB/4GB/8GB

 

12쪽 위에서 일곱 번째 줄

35달러(1기가)/45달러(2기가)/55달러(4기가) ==> 35달러(2기가)/55달러(4기가)/75달러(8기가)

 

12  1-2 라즈베리 파이 4B 칸

1/2/4GB @ 2400MHz ==>  2/4/8GB @ 2400MHz

 

47쪽 위에서 4번째 줄

라즈베리 파이는 $5부터 $35/45/55 아주 저렴한 가격에 구매가 가능하며

==>

라즈베리 파이는 $5부터 $35/$55/$75 아주 저렴한 가격에 구매가 가능하며

 

96쪽 그림 2-15

동적 메모리 영역 (* 해당 텍스트를 heap 옆으로 이동)

 

116쪽 그림 3-10 제목 수정

그림 3-10 다양한 커넥터들 ==> 그림 3-10 점프케이블과 다양한 커넥터들

 

127쪽 제일 윗줄 코드상의 sudo 삭제

pi@raspberrypi:~ $ sudo ./wiringled 1 ==> pi@raspberrypi:~ $ ./wiringled 1

 

140쪽 그림 3-34 제목 순서 변경

그림 3-34 DC 모터스태핑 모터서보 모터, AC 모터 ==> 그림 3-34 DC 모터스태핑 모터,AC 모터, 서보 모터

 

143쪽 중간 코드문의 sudo 삭제

pi@raspberrypi:~ $ sudo ./wiringmotor 2

==>

pi@raspberrypi:~ $ ./wiringmotor 2

 

160쪽 세 번째 문단 수정

스펙 문서를 보면 압력의 출력값을 위한 PRESS_OUT_XL과 PRESS_OUT_L, PRESS_OUT_H 등의 값을 살펴보면 28h, 29h, 2Ah 등의 주소를 사용하는 것을 확인할 수 있다. 이 문서를 이용해서 레지스터의 주소를 정리해보면 다음 코드와 같이 나타낼 수 있다.

==>

스팩 문서를 보면 습도와 온도의 출력값을 위한 H_T_OUT_L, H_T_OUT_H, TEMP_OUT_L, TEMP_OUT_H 등의 값을 살펴보면 28h, 29h, 2Ah, 2Bh 등의 주소를 사용하는 것을 확인할  있다 문서를 이용해서 레지스터의 주소를 정리해보면 다음의 코드와 같이 나타낼  있다.

 

166쪽 소스 코드 잘못된 부분 수정

        getAccel(acc_fd, &ax, &ay, &az);
        printf("Accelerator : %d, %d, %d\n", ax, ay, ax);
                     
        getGyro(acc_fd, &gx, &gy, &gz);
        printf("Gyro : %d(pitch), %d(roll), %d(yaw)\n", gx, gy, gx);
==>
        getAccel(acc_fd, &ax, &ay, &az);
        printf("Accelerator : %d, %d, %d\n", ax, ay, az);
                     
        getGyro(acc_fd, &gx, &gy, &gz);
        printf("Gyro : %d(pitch), %d(roll), %d(yaw)\n", gx, gy, gz);

 

167쪽 제일 아래 코드 박스의 내용 수정. 제일 윗부분은 기존의 서식(볼드체지정

pi@raspberrypi ~ $ gcc -o accelerometer accelerometer.c -lwiringPi
pi@raspberrypi ~ $ ./accelerometer
Accelerator : -1150, -127 ,15807
Gyro : 65427(pitch), 53(roll), 65502(yaw)
magnetic : 2638, 1470, -3414
Accelerator : -1160, -145 ,15827
Gyro : 65429(pitch), 54(roll), 65503(yaw)
magnetic : 2638, 1470, -3414
/* ~ 중간 표시 생략 ~ */
Accelerator : -1157, -101 ,15873
Gyro : 65430(pitch), 54(roll), 65506(yaw)
magnetic : 2621, 1484, -3456

 

178  4-2 추가

함수                                        내용                                                          비고

sync( )            변경된 캐쉬(cache/buffer) 바로 비운다/출력한다.         fsync( ) fdatasync( )

 

273쪽 위에서 10번째 줄 

좀비 프로세서(zombie)라고 한다. ==> 좀비(zombie)프로세서라고 한다.

 

274쪽 그림 5-17 그림상의 텍스트

* 상위 8비트 / 하위 8비트 텍스트 위치를 서로 맞바꿉니다.

 

280 posix_spawn() 함수 절 제목

posix_spawn( )  (* 괄호 사이에 반공백 문자 삽입)

 

285 코드 5-8

execl("/bin/date", "date", 0); ==> execl("/bin/date", "date", NULL);   (* execl( ) 함수의 세 번째 인자를 0에서 NULL 변경)

더보기

#include <stdio.h>                  /* printf( ) 함수를 위해 사용 */

#include <unistd.h>

#include <sys/wait.h>                              /* waitpid() 함수를 위해 사용 */

 

int main(int argc, char **argv)

{

    pid_t pid;

    int pfd[2];

    char line[BUFSIZ];                                 /* <stdio.h> 파일에 정의된 버퍼 크기로 설정 */

    int status;

 

    if(pipe(pfd) < 0) {                  /* pipe( ) 함수를 이용해서 파이프 생성 */

        perror("pipe()");

        return -1;

    }

 

    if((pid = fork()) < 0) {            /* fork( ) 함수를 이용해서 프로세스 생성 */

        perror("fork()");

        return -1;

    } else if(pid == 0) {                /* 자식 프로세스인 경우의 처리 */

        close(pfd[0]);                    /* 읽기를 위한 파일 디스크립터 닫기 */

        dup2(pfd[1], 1);                /* 쓰기를 위한 파일 디스크립터를 표준 출력(1)으로 변경 */

        execl("/bin/date", "date", NULL);                    /* date 명령어 수행 */

        close(pfd[1]);                    /* 쓰기를 위한 파일 디스크립터 닫기 */

        _exit(127);

    } else {                                   /* 부모 프로세스인 경우의 처리 */

        close(pfd[1]);                    /* 쓰기를 위한 파일 디스크립터 닫기 */

        if(read(pfd[0], line, BUFSIZ) < 0) {    /* 파일 디스크립터로부터 데이터 읽기 */

            perror("read()");

            return -1;

        }

        printf("%s", line);             /* 파일 디스크립터로부터 읽은 내용을 화면에 표시 */

        close(pfd[0]);                    /* 읽기를 위한 파일 디스크립터 닫기 */

        waitpid(pid, &status, 0);                  /* 자식 프로세스의 종료를 기다리기 */

    }

 

    return 0;

 

286쪽 위에서 네 번째 

dup( ) 함수를 이용하여 표준 출력(1)...

==>

dup2( ) 함수를 이용하여 표준 출력(1)...

 

298쪽 코드 들여쓰기

(* '/* 손님이 일어나면 남은 식탁의 수를 증가 */' 주석을 /아래에 주석과 들여쓰기 맞추기)

 

313~314쪽 따라 하기 코드 박스

ptheadV ==> pthreadV

ptheadP ==> pthreadP

 

315쪽 아래서 두 번째 

경쟁 조건(Race condition)  ==> 경쟁 상태(Race condition)

 

333~345쪽 하단 쪽 번호

5.6 네트워크의 개요와 BSD 소켓 ==> 6.1 네트워크의 개요와 BSD 소켓

 

339쪽 10 11 각주의 설명을 서로 맞바꿈

(* 두 개의 각주가 바뀌었습니다10 각주는 11번을 위한 것이고 11 각주는 10번을 위한 것입니다.)

 

346쪽 위에서 여섯 번째 서식 변경

(* stdio(0)가 이후 글자와 크기가 같아야 함)

 

352페이지 : 6-2에서 두번째 getnameinfo( ) getaddrinfo( ) 변경

getaddrinfo( ) IP 주소로부터 도메인 주소를 구한다. 최신의 DNS 서버는 보안 문제로 Reverse DNS 기능을 지원하기 않기 때문에 getnameinfo( ) 함수가 제대로 동작하지 않을 수 있다. gethostbyaddr( ), getservbyport( )
 
353쪽 코드 사이에 공백 추가(아래서 두 번째 줄)

int sockfd,n; --> int sockfd, n;

 

최종수정일자: 2020년 9월 2일
1~3쇄본 오탈자

96쪽 그림 2-15의 좌측 밑에서 두 번째 네모 박스에 텍스트 누락
.text(code)

96쪽 그림 2-15의 좌측 밑에서 다섯 번째 네모 박스 우측에 텍스트 누락
malloc( ) 등의 메모리 할당 함수 사용 시

 

최종수정일자: 2020년 3월 16일
1쇄본 오탈자

796쪽 세 번째 코드 박스의 2행에서(윤O필 님 제보)
pi@raspberrypi:/usr/src/linux $ sudo cp ./arch/arm/boot/zImage /boot/kerne7l.img
==> 
pi@raspberrypi:/usr/src/linux $ sudo cp ./arch/arm/boot/zImage /boot/kernel7l.img