책 소개
소스 파일은 아래 링크에서 내려 받으실 수 있습니다.
(https://www.man7.org/tlpi/code/download/tlpi-201025-book.tar.gz)
리눅스에서 프로그램을 작성할 때 사용하는 시스템 호출과 라이브러리 함수를 설명한 책으로, 해당 함수를 사용할 수 있는 리눅스 버전, 버전별 차이 등을 꼼꼼하게 정리했다. 워낙 방대한 내용이라 1권과 2권으로 나눠 구성했으며, 1권은 기초편으로, 리눅스 프로그래밍에서 흔히 쓰이는 파일 관리, 메모리 관리, 프로세스 관리, 시그널 처리, 타이머 사용법 등을 다룬다. 2권은 고급편으로, 좀더 세련되고 복잡한 리눅스 프로그램을 만들 때 사용되는 스레드 관리, IPC 사용법, 소켓 사용법 등을 다룬다.
[ 세트 구성: 전2권 ]
1) 『리눅스 API의 모든 것 Vol. 1 기초 리눅스 API: 파일, 메모리, 프로세스, 시그널, 타이머』
2) 『리눅스 API의 모든 것 Vol. 2 고급 리눅스 API: 스레드, IPC, 소켓, 고급 I/O』
[ 소개 ]
리눅스와 유닉스 시스템 프로그래밍 인터페이스를 빠짐없이 다룬 최고의 안내서!
『리눅스 API의 모든 것』은 리눅스와 유닉스 프로그래밍 인터페이스(리눅스나 유닉스 시스템에서 동작하는 거의 모든 응용 프로그램이 사용하는 인터페이스)을 위한 최고의 안내서다.
리눅스 프로그래밍 전문가 마이클 커리스크는 이 권위 있는 책에서, 시스템 프로그래밍 기술을 마스터하는 데 필요한 시스템 호출과 라이브러리 함수를 자세히 설명하며, 이에 덧붙여 명확하고 완전한 예제 프로그램을 제공한다.
이 책에서는 1권과 2권 통틀어 500개가 넘는 시스템 호출과 라이브러리 함수, 200개가 넘는 예제 프로그램, 88개의 표, 115개의 다이어그램에 대한 설명이 들어 있으며, 다음과 같은 내용을 설명한다.
■ 파일을 효율적으로 읽고 쓰기
■ 시그널, 클록, 타이머 사용법
■ 프로세스를 만들고 프로그램 실행하기
■ 안전한 프로그램 작성법
■ 공유 라이브러리 만들고 사용하기
■ POSIX 스레드를 이용한 멀티스레드 프로그램 작성법
■ 파이프, 메시지 큐, 공유 메모리, 세마포어를 이용한 프로세스 간 통신
■ 소켓 API를 이용한 네트워크 프로그램 작성법
『리눅스 API의 모든 것』이 epoll, inotify, /proc 파일 시스템 등 수많은 리눅스 고유 기능을 다루지만, 유닉스 표준(POSIX.1-2001/SUSv3와 POSIX.1-2008/SUSv4)을 강조하기 때문에 여타 유닉스 플랫폼에서 작업하는 프로그래머들에게도 마찬가지로 가치가 크다.
『리눅스 API의 모든 것』은 리눅스와 유닉스 프로그래밍 인터페이스를 다룬 가장 포괄적인 책이며, 새로운 고전이 되리라 믿어 의심치 않는다.
[ 이 책의 대상 독자 ]
● 리눅스나 기타 유닉스, 기타 POSIX 호환 시스템용 응응 프로그램을 작성하는 프로그래머와 소프트웨어 설계자
● 리눅스와 기타 유닉스 구현 간이나 리눅스와 기타 운영체제 간에 응용 프로그램을 이식하는 프로그래머
● 리눅스/유닉스 프로그래밍 인터페이스와, 시스템 소프트웨어의 다양한 부분이 어떻게 구현됐는지를 좀 더 잘 이해하고자 하는 시스템 관리자와 ‘파워 유저’
[ 한국어판 출간에 부쳐 ]
『The Linux Programming Interface』 한국 독자 여러분께 인사를 전합니다.
『The Linux Programming Interface』(한국어판 제목: 『리눅스 API의 모든 것』)는 리눅스 시스템 프로그래밍 API를 거의 모두 설명한 책으로서 전통적인 서버, 메인프레임, 데스크탑 시스템부터 근래 리눅스를 사용하는 임베디드 디바이스에 이르기까지 광범위한 리눅스 플랫폼에 적용할 수 있습니다. 뿐만 아니라 리눅스 커널이 안드로이드의 심장부를 이루고 있기 때문에, 이 책 내용의 대부분은 안드로이드 디바이스 상의 프로그래밍에도 응용할 수 있습니다.
이 책의 영문판은 2010년 말에 출간되었습니다. 이후로 9개의 새로운 리눅스 커널 버전이 릴리스되었습니다(버전 2.6.36부터 3.4까지). 그럼에도 영문판과 이 한국어판의 내용은 여전히 최신에 가깝고, 앞으로도 수년 동안 유효할 것입니다. 그 주된 이유는 리눅스 커널의 개발이 매우 빠르지만, 커널-사용자 공간 API의 변경 속도는 매우 느리기 때문입니다(이는 커널이 사용자 공간 응용프로그램의 ‘안정적인’ 기반을 제공하도록 설계된다는 사실의 당연한 결과입니다). 따라서 최근 9개의 커널 버전을 보면, 커널-사용자 공간 API의 변경은 비교적 적었음을 알 수 있습니다. 더욱이 발생한 변경들도 이 책에 설명된 기존 기능의 ‘수정’보다는 이 책에 설명된 인터페이스에 ‘추가’되는 형태를 띱니다(다시 한 번 말하지만, 이는 커널 설계 과정의 자연적인 결과로, 리눅스 커널 개발자들은 ‘기존’ 사용자 공간 API를 깨뜨리지 않기 위해 엄청나게 애씁니다). 궁금한 독자들은 저의 웹사이트 http://man7.org/tlpi/api_changes/에서 영문판이 출판된 이래의 사용자 공간 API 변경 사항들(영문으로 되어 있음)을 찾아볼 수 있습니다.
한국어판의 독자들은 영문판과 한국어판 사이에 약간의 구조적인 차이가 있음을 참조하시면 좋겠습니다. 가장 두드러진 차이는 영문판이 한 권으로 출간된 반면, 한국어판은 한국어로 옮기는 과정에서 책의 분량이 늘어난 이유 때문에 부득이하게 두 권으로 출간된 점입니다. 그 과정에서 몇몇 장들의 순서가 약간 바뀌었습니다. POSIX 스레드를 설명한 5개의 장은 뒤쪽으로 이동하여 한국어판 2권(Vol.2)의 첫 장들로 구성되었습니다(두 권으로 나눌 경우, 저와 출판사는 이렇게 순서를 바꾸는 것이 더 합리적이라고 서로 동의했습니다).
마지막으로, 저의 책이 다른 언어로 번역되는 것은 제게는 크나큰 영광입니다. 제 책에 대한 다수의 번역 작업이 각국에서 현재 진행 중이지만, 한국어판이 세계에서 최초로 출간되는 번역서로 이름을 올렸습니다. 1,500페이지가 넘는 분량을 번역하는 일은 대단한 과업입니다. 멋진 번역을 만들어낸, 부지런하고 빠르게 작업해준 출판사와 번역 팀에게 감사합니다. 저의 작업물과, 이 책을 옮겨 준 번역 팀의 좋은 글과, 영문판에 도움을 준 여러 관계자분들의 노고가 한국어판 독자들에게 많은 도움이 되길 바랍니다.
- 2012년 6월, 독일 뮌헨에서
마이클 커리스크
(https://www.man7.org/tlpi/code/download/tlpi-201025-book.tar.gz)
리눅스에서 프로그램을 작성할 때 사용하는 시스템 호출과 라이브러리 함수를 설명한 책으로, 해당 함수를 사용할 수 있는 리눅스 버전, 버전별 차이 등을 꼼꼼하게 정리했다. 워낙 방대한 내용이라 1권과 2권으로 나눠 구성했으며, 1권은 기초편으로, 리눅스 프로그래밍에서 흔히 쓰이는 파일 관리, 메모리 관리, 프로세스 관리, 시그널 처리, 타이머 사용법 등을 다룬다. 2권은 고급편으로, 좀더 세련되고 복잡한 리눅스 프로그램을 만들 때 사용되는 스레드 관리, IPC 사용법, 소켓 사용법 등을 다룬다.
[ 세트 구성: 전2권 ]
1) 『리눅스 API의 모든 것 Vol. 1 기초 리눅스 API: 파일, 메모리, 프로세스, 시그널, 타이머』
2) 『리눅스 API의 모든 것 Vol. 2 고급 리눅스 API: 스레드, IPC, 소켓, 고급 I/O』
[ 소개 ]
리눅스와 유닉스 시스템 프로그래밍 인터페이스를 빠짐없이 다룬 최고의 안내서!
『리눅스 API의 모든 것』은 리눅스와 유닉스 프로그래밍 인터페이스(리눅스나 유닉스 시스템에서 동작하는 거의 모든 응용 프로그램이 사용하는 인터페이스)을 위한 최고의 안내서다.
리눅스 프로그래밍 전문가 마이클 커리스크는 이 권위 있는 책에서, 시스템 프로그래밍 기술을 마스터하는 데 필요한 시스템 호출과 라이브러리 함수를 자세히 설명하며, 이에 덧붙여 명확하고 완전한 예제 프로그램을 제공한다.
이 책에서는 1권과 2권 통틀어 500개가 넘는 시스템 호출과 라이브러리 함수, 200개가 넘는 예제 프로그램, 88개의 표, 115개의 다이어그램에 대한 설명이 들어 있으며, 다음과 같은 내용을 설명한다.
■ 파일을 효율적으로 읽고 쓰기
■ 시그널, 클록, 타이머 사용법
■ 프로세스를 만들고 프로그램 실행하기
■ 안전한 프로그램 작성법
■ 공유 라이브러리 만들고 사용하기
■ POSIX 스레드를 이용한 멀티스레드 프로그램 작성법
■ 파이프, 메시지 큐, 공유 메모리, 세마포어를 이용한 프로세스 간 통신
■ 소켓 API를 이용한 네트워크 프로그램 작성법
『리눅스 API의 모든 것』이 epoll, inotify, /proc 파일 시스템 등 수많은 리눅스 고유 기능을 다루지만, 유닉스 표준(POSIX.1-2001/SUSv3와 POSIX.1-2008/SUSv4)을 강조하기 때문에 여타 유닉스 플랫폼에서 작업하는 프로그래머들에게도 마찬가지로 가치가 크다.
『리눅스 API의 모든 것』은 리눅스와 유닉스 프로그래밍 인터페이스를 다룬 가장 포괄적인 책이며, 새로운 고전이 되리라 믿어 의심치 않는다.
[ 이 책의 대상 독자 ]
● 리눅스나 기타 유닉스, 기타 POSIX 호환 시스템용 응응 프로그램을 작성하는 프로그래머와 소프트웨어 설계자
● 리눅스와 기타 유닉스 구현 간이나 리눅스와 기타 운영체제 간에 응용 프로그램을 이식하는 프로그래머
● 리눅스/유닉스 프로그래밍 인터페이스와, 시스템 소프트웨어의 다양한 부분이 어떻게 구현됐는지를 좀 더 잘 이해하고자 하는 시스템 관리자와 ‘파워 유저’
[ 한국어판 출간에 부쳐 ]
『The Linux Programming Interface』 한국 독자 여러분께 인사를 전합니다.
『The Linux Programming Interface』(한국어판 제목: 『리눅스 API의 모든 것』)는 리눅스 시스템 프로그래밍 API를 거의 모두 설명한 책으로서 전통적인 서버, 메인프레임, 데스크탑 시스템부터 근래 리눅스를 사용하는 임베디드 디바이스에 이르기까지 광범위한 리눅스 플랫폼에 적용할 수 있습니다. 뿐만 아니라 리눅스 커널이 안드로이드의 심장부를 이루고 있기 때문에, 이 책 내용의 대부분은 안드로이드 디바이스 상의 프로그래밍에도 응용할 수 있습니다.
이 책의 영문판은 2010년 말에 출간되었습니다. 이후로 9개의 새로운 리눅스 커널 버전이 릴리스되었습니다(버전 2.6.36부터 3.4까지). 그럼에도 영문판과 이 한국어판의 내용은 여전히 최신에 가깝고, 앞으로도 수년 동안 유효할 것입니다. 그 주된 이유는 리눅스 커널의 개발이 매우 빠르지만, 커널-사용자 공간 API의 변경 속도는 매우 느리기 때문입니다(이는 커널이 사용자 공간 응용프로그램의 ‘안정적인’ 기반을 제공하도록 설계된다는 사실의 당연한 결과입니다). 따라서 최근 9개의 커널 버전을 보면, 커널-사용자 공간 API의 변경은 비교적 적었음을 알 수 있습니다. 더욱이 발생한 변경들도 이 책에 설명된 기존 기능의 ‘수정’보다는 이 책에 설명된 인터페이스에 ‘추가’되는 형태를 띱니다(다시 한 번 말하지만, 이는 커널 설계 과정의 자연적인 결과로, 리눅스 커널 개발자들은 ‘기존’ 사용자 공간 API를 깨뜨리지 않기 위해 엄청나게 애씁니다). 궁금한 독자들은 저의 웹사이트 http://man7.org/tlpi/api_changes/에서 영문판이 출판된 이래의 사용자 공간 API 변경 사항들(영문으로 되어 있음)을 찾아볼 수 있습니다.
한국어판의 독자들은 영문판과 한국어판 사이에 약간의 구조적인 차이가 있음을 참조하시면 좋겠습니다. 가장 두드러진 차이는 영문판이 한 권으로 출간된 반면, 한국어판은 한국어로 옮기는 과정에서 책의 분량이 늘어난 이유 때문에 부득이하게 두 권으로 출간된 점입니다. 그 과정에서 몇몇 장들의 순서가 약간 바뀌었습니다. POSIX 스레드를 설명한 5개의 장은 뒤쪽으로 이동하여 한국어판 2권(Vol.2)의 첫 장들로 구성되었습니다(두 권으로 나눌 경우, 저와 출판사는 이렇게 순서를 바꾸는 것이 더 합리적이라고 서로 동의했습니다).
마지막으로, 저의 책이 다른 언어로 번역되는 것은 제게는 크나큰 영광입니다. 제 책에 대한 다수의 번역 작업이 각국에서 현재 진행 중이지만, 한국어판이 세계에서 최초로 출간되는 번역서로 이름을 올렸습니다. 1,500페이지가 넘는 분량을 번역하는 일은 대단한 과업입니다. 멋진 번역을 만들어낸, 부지런하고 빠르게 작업해준 출판사와 번역 팀에게 감사합니다. 저의 작업물과, 이 책을 옮겨 준 번역 팀의 좋은 글과, 영문판에 도움을 준 여러 관계자분들의 노고가 한국어판 독자들에게 많은 도움이 되길 바랍니다.
- 2012년 6월, 독일 뮌헨에서
마이클 커리스크
목차
목차
- 『리눅스 API의 모든 것 Vol. 1 기초 리눅스 API』
- 1장 역사와 표준
- 2장 기본 개념
- 3장 시스템 프로그래밍 개념
- 4장 파일 I/O: 범용 I/O 모델
- 5장 파일 I/O: 더 자세히
- 6장 프로세스
- 7장 메모리 할당
- 8장 사용자와 그룹
- 9장 프로세스 자격증명
- 10장 시간
- 11장 시스템 한도와 옵션
- 12장 시스템과 프로세스 정보
- 13장 파일 I/O 버퍼링
- 14장 파일 시스템
- 15장 파일 속성
- 16장 확장 속성
- 17장 ACL
- 18장 디렉토리와 링크
- 19장 파일 이벤트 감시
- 20장 시그널: 기본 개념
- 21장 시그널: 시그널 핸들러
- 22장 시그널: 고급 기능
- 23장 타이머와 수면
- 24장 프로세스 생성
- 25장 프로세스 종료
- 26장 자식 프로세스 감시
- 27장 프로그램 실행
- 28장 더 자세히 살펴보는 프로세스 생성과 프로그램 실행
- 29장 프로세스 그룹, 세션, 작업 제어
- 30장 프로세스 우선순위와 스케줄링
- 31장 프로세스 자원
- 32장 데몬
- 33장 안전한 특권 프로그램 작성
- 34장 능력
- 35장 로그인 계정
- 36장 공유 라이브러리 기초
- 37장 공유 라이브러리의 고급 기능
- 부록
- 『리눅스 API의 모든 것 Vol. 2 고급 리눅스 API』
- 1장 스레드: 소개
- 2장 스레드: 스레드 동기화
- 3장 스레드: 스레드 안전성과 스레드별 저장소
- 4장 스레드: 스레드 취소
- 5장 스레드: 기타 세부사항
- 6장 프로세스 간 통신 개요
- 7장 파이프와 FIFO
- 8장 시스템 V IPC 소개
- 9장 시스템 V 메시지 큐
- 10장 시스템 V 세마포어
- 11장 시스템 V 공유 메모리
- 12장 메모리 매핑
- 13장 가상 메모리 동작
- 14장 POSIX IPC 소개
- 15장 POSIX 메시지 큐
- 16장 POSIX 세마포어
- 17장 POSIX 공유 메모리
- 18장 파일 잠금
- 19장 소켓: 소개
- 20장 소켓: 유닉스 도메인
- 21장 소켓: TCP/IP 네트워크 기초
- 22장 소켓: 인터넷 도메인
- 23장 소켓: 서버 설계
- 24장 소켓: 고급 옵션
- 25장 터미널
- 26장 대체 I/O 모델
- 27장 가상 터미널
관련 블로그 글
지금까지 이런 책은 없었다!『리눅스 API의 모든 것』
『리눅스 API의 모든 것』
(세트) Vol. 1 기초 API + Vol. 2 고급 API
파일, 메모리, 프로세스, 시그널, 타이머, 스레드, IPC, 소켓, 고급 I/O
마이클 커리스크 지음 | 김기주, 김영주, 우정은, 지영민, 채원석, 황진호 옮김
총 1,960쪽 | 79,000원 | 2012년 7월 17일 펴냄 (출간예정) | ISBN 9788960773226
YES24, 교보문고, 인터파크, 알라딘, 강컴, 반디앤루니스, 대교리브로
(세트) Vol. 1 기초 API + Vol. 2 고급 API
파일, 메모리, 프로세스, 시그널, 타이머, 스레드, IPC, 소켓, 고급 I/O
마이클 커리스크 지음 | 김기주, 김영주, 우정은, 지영민, 채원석, 황진호 옮김
총 1,960쪽 | 79,000원 | 2012년 7월 17일 펴냄 (출간예정) | ISBN 9788960773226
YES24, 교보문고, 인터파크, 알라딘, 강컴, 반디앤루니스, 대교리브로
리눅스와 유닉스 시스템 프로그래밍 API를 빠짐없이 다룬 최고의 바이블!
오늘날 리눅스의 위상은 날로 높아져가고 있습니다. 리눅스 운영체제로 돌아가는 데스크톱 컴퓨터를 찾기는 쉽지 않지만, 우리가 일상에서 사용하는 제품들에는 리눅스의 손길이 뻗치지 않은 것을 찾기가 어려울 정도입니다. 인터넷을 움직이는 서버, 오늘날 현대인의 삶을 지배해버린 스마트폰과 태블릿, 자동차마다 하나씩 장착되어 있는 내비게이션 기기와 블랙박스, TV와 셋톱박스, 블루레이 플레이어, 냉장고, 인터넷 공유기, 프린터 등, 수많은 기기를 돌리는 원동력에는 리눅스가 존재합니다.
이렇게 곳곳에서 쓰이는 리눅스의 포진으로 인해 용처는 많아졌지만, 관련 서적에 뭔가 갈증을 느끼는 개발자 분들이 많았을 것입니다. 리눅스 사용자 매뉴얼이나 리눅스 디바이스 드라이버, 리눅스 커널, 각종 리눅스 버전, 리눅스 서버 관리 등을 다룬 책은 물론 많았습니다. 하지만 이 책처럼 리눅스 API를 샅샅이 다루는 책은 지금까지 없었습니다.
리눅스/유닉스 시스템과 안드로이드 네이티브 프로그래머를 위한 전무후무한 책
[##_1R|1213094826.jpg|width="155" height="175" alt="사용자 삽입 이미지"|_##]이 책을 쓴 마이클 커리스크(Michael Kerrisk)(http://man7.org)는 20년 이상 유닉스 시스템을 사용하고 프로그래밍을 했으며, 유닉스 시스템 프로그램을 주제로 한 많은 강의 경험이 있습니다. 2004년부터 리눅스 커널과 glibc 프로그래밍 API를 설명하는 매뉴얼 페이지 프로젝트를 관리했으며, 250개가 넘는 매뉴얼 페이지를 작성했거나 공동 작성했고, 새로운 리눅스 커널/사용자 공간 인터페이스의 테스트와 설계 리뷰에 활발히 참여하고 있는 리눅스 계의 진정한 구루입니다.
이 책 『리눅스 API의 모든 것』은 2010년 10월에 노스타치(No Starch) 출판사에서 출간된 The Linux Programming Interface: A Linux and UNIX System Programming Handbook를 번역한 책입니다. 원서 자체만도 1552페이지에
달하는 방대한 책으로서 아마존닷컴 독자들이 남긴 서평을 봐도 이 책이 지닌 중요성과 무게감을 단박에 느낄 수 있습니다. 무려 36명에 달하는 독자들이 모두 별 5개를 남긴 기술서로서는 흔치 않은 호평을 받은 명저입니다.
amazon.com ★★★★★
- Incredible book for Linux developers and sysadmins (리눅스 개발자와 시스템 관리자를 위한 어마어마한 책)
- The best book ever about Linux API (리눅스 API에 관한 최고의 책)
- A Complete Book (완벽한 책)
- Everything you wanted to know about UNIX/LINUX but were afraid to ask (늘 알고 싶었으나 누군가에게 물어보기는 어려웠던 리눅스와 유닉스에 관한 모든 것)
- Best computer book I ever bought (내가 산 컴퓨터 책 중 최고다)
- Best linux system programming book on the market (출간된 책 중 최고의 리눅스 시스템 프로그래밍 책)
- An outstandingly good book (엄청나게 훌륭한 책)
- If you are a Linux or UNIX programmer, get this book (리눅스/유닉스 프로그래머라면, 이 책을 반드시 사라)
- Excellent (훌륭하다)
- Must have book for all Linux developers! (모든 리눅스 개발자가 꼭 소장해야 하는 책!)
- De Facto Standard for Linux System Programmers (리눅스 시스템 프로그래머를 위한 사실상 표준)
- Comprehensive (이해하기 쉽다)
- Excellent Reference Book (탁월한 참고서)
- This book is awesome!!! (정말 멋진 책이다!)
마이클 커리스크는 이 책에서 시스템 프로그래밍 기술을 마스터하는 데 필요한 시스템 호출과 라이브러리 함수를 자세히 설명하며, 이에 덧붙여 명확하고 완전한 예제 프로그램을 제공합니다. 이 책에서는 1권과 2권 통틀어 500개가 넘는 시스템 호출과 라이브러리 함수, 200개가 넘는 예제 프로그램, 88개의 표, 115개의 다이어그램에 대한 설명이 들어 있으며, 다음과 같은 내용을 설명합니다.
오늘날 리눅스의 위상은 날로 높아져가고 있습니다. 리눅스 운영체제로 돌아가는 데스크톱 컴퓨터를 찾기는 쉽지 않지만, 우리가 일상에서 사용하는 제품들에는 리눅스의 손길이 뻗치지 않은 것을 찾기가 어려울 정도입니다. 인터넷을 움직이는 서버, 오늘날 현대인의 삶을 지배해버린 스마트폰과 태블릿, 자동차마다 하나씩 장착되어 있는 내비게이션 기기와 블랙박스, TV와 셋톱박스, 블루레이 플레이어, 냉장고, 인터넷 공유기, 프린터 등, 수많은 기기를 돌리는 원동력에는 리눅스가 존재합니다.
이렇게 곳곳에서 쓰이는 리눅스의 포진으로 인해 용처는 많아졌지만, 관련 서적에 뭔가 갈증을 느끼는 개발자 분들이 많았을 것입니다. 리눅스 사용자 매뉴얼이나 리눅스 디바이스 드라이버, 리눅스 커널, 각종 리눅스 버전, 리눅스 서버 관리 등을 다룬 책은 물론 많았습니다. 하지만 이 책처럼 리눅스 API를 샅샅이 다루는 책은 지금까지 없었습니다.
리눅스/유닉스 시스템과 안드로이드 네이티브 프로그래머를 위한 전무후무한 책
[##_1R|1213094826.jpg|width="155" height="175" alt="사용자 삽입 이미지"|_##]이 책을 쓴 마이클 커리스크(Michael Kerrisk)(http://man7.org)는 20년 이상 유닉스 시스템을 사용하고 프로그래밍을 했으며, 유닉스 시스템 프로그램을 주제로 한 많은 강의 경험이 있습니다. 2004년부터 리눅스 커널과 glibc 프로그래밍 API를 설명하는 매뉴얼 페이지 프로젝트를 관리했으며, 250개가 넘는 매뉴얼 페이지를 작성했거나 공동 작성했고, 새로운 리눅스 커널/사용자 공간 인터페이스의 테스트와 설계 리뷰에 활발히 참여하고 있는 리눅스 계의 진정한 구루입니다.
이 책 『리눅스 API의 모든 것』은 2010년 10월에 노스타치(No Starch) 출판사에서 출간된 The Linux Programming Interface: A Linux and UNIX System Programming Handbook를 번역한 책입니다. 원서 자체만도 1552페이지에
달하는 방대한 책으로서 아마존닷컴 독자들이 남긴 서평을 봐도 이 책이 지닌 중요성과 무게감을 단박에 느낄 수 있습니다. 무려 36명에 달하는 독자들이 모두 별 5개를 남긴 기술서로서는 흔치 않은 호평을 받은 명저입니다.
amazon.com ★★★★★
- Incredible book for Linux developers and sysadmins (리눅스 개발자와 시스템 관리자를 위한 어마어마한 책)
- The best book ever about Linux API (리눅스 API에 관한 최고의 책)
- A Complete Book (완벽한 책)
- Everything you wanted to know about UNIX/LINUX but were afraid to ask (늘 알고 싶었으나 누군가에게 물어보기는 어려웠던 리눅스와 유닉스에 관한 모든 것)
- Best computer book I ever bought (내가 산 컴퓨터 책 중 최고다)
- Best linux system programming book on the market (출간된 책 중 최고의 리눅스 시스템 프로그래밍 책)
- An outstandingly good book (엄청나게 훌륭한 책)
- If you are a Linux or UNIX programmer, get this book (리눅스/유닉스 프로그래머라면, 이 책을 반드시 사라)
- Excellent (훌륭하다)
- Must have book for all Linux developers! (모든 리눅스 개발자가 꼭 소장해야 하는 책!)
- De Facto Standard for Linux System Programmers (리눅스 시스템 프로그래머를 위한 사실상 표준)
- Comprehensive (이해하기 쉽다)
- Excellent Reference Book (탁월한 참고서)
- This book is awesome!!! (정말 멋진 책이다!)
마이클 커리스크는 이 책에서 시스템 프로그래밍 기술을 마스터하는 데 필요한 시스템 호출과 라이브러리 함수를 자세히 설명하며, 이에 덧붙여 명확하고 완전한 예제 프로그램을 제공합니다. 이 책에서는 1권과 2권 통틀어 500개가 넘는 시스템 호출과 라이브러리 함수, 200개가 넘는 예제 프로그램, 88개의 표, 115개의 다이어그램에 대한 설명이 들어 있으며, 다음과 같은 내용을 설명합니다.
■ 파일을 효율적으로 읽고 쓰기
■ 시그널, 클록, 타이머 사용법
■ 프로세스를 만들고 프로그램 실행하기
■ 안전한 프로그램 작성법
■ 공유 라이브러리 만들고 사용하기
■ POSIX 스레드를 이용한 멀티스레드 프로그램 작성법
■ 파이프, 메시지 큐, 공유 메모리, 세마포어를 이용한 프로세스 간 통신
■ 소켓 API를 이용한 네트워크 프로그램 작성법
■ 시그널, 클록, 타이머 사용법
■ 프로세스를 만들고 프로그램 실행하기
■ 안전한 프로그램 작성법
■ 공유 라이브러리 만들고 사용하기
■ POSIX 스레드를 이용한 멀티스레드 프로그램 작성법
■ 파이프, 메시지 큐, 공유 메모리, 세마포어를 이용한 프로세스 간 통신
■ 소켓 API를 이용한 네트워크 프로그램 작성법
『리눅스 API의 모든 것』이 epoll, inotify, /proc 파일 시스템 등 수많은 리눅스 고유 기능을 다루지만, 유닉스 표준(POSIX.1-2001/SUSv3와 POSIX.1-2008/SUSv4)을 강조하기 때문에 여타 유닉스 플랫폼에서 작업하는 프로그래머들에게도 마찬가지로 가치가 큽니다. 특히 이 책은 서버에서 동작하는 리눅스용 프로그램을 작성하는 사람들에게 좋은 참고서가 될 것이고, 안드로이드 네이티브 프로그래밍을 하는 개발자분들에게도 훌륭한 가이드가 될 것입니다. 또한 임베디드 시스템용 프로그램을 작성하는 사람들의 경우, 임베디드 리눅스에서는 서버에서 제공되는 모든 기능을 사용할 수는 없겠지만, 많은 부분이 겹칠 것이고 활용할 수 있습니다.
원서의 내용이 1500페이지가 넘을 정도로 워낙 방대하여 번역서를 펴내면서 늘어나는 분량이 최소한이 되도록 최대한 신경을 써서 편집했습니다. 그러나 그럼에도 총 페이지가 거의 2000페이지에 달하는 분량이 되어버렸기에 부득이하게 두 권으로 나눠 펴낼 수밖에 없었습니다. 이 과정에서 저자 마이클 커리스크와 저희 역자분들이 긴밀히 의견을 나누면서 저자의 제안을 받아들여 독자분들의 학습에 도움이 되도록 챕터의 순서를 약간 조정하여 Vol. 1 기초편과 Vol 2. 고급편으로 나눠 출간하게 됐습니다. 물론 각 권은 인터넷 서점과 전국 대형서점에서 따로따로 구매하실 수 있습니다. 예약판매도 받고 있고요.
Vol. 1에서는 기초 API를 다루며, Vol. 2에서는 고급 API를 다루는 것으로, 독자의 수준을 고려해 개별적으로 학습할 수 있도록 배려하여 책을 나눴습니다. 물론 그 과정에서 각 장 내의 그림, 표, 코드의 일련 번호를 모두 새로 편집해야 하는 엄청난 작업량이 늘기는
했지만, 저자분과 역자분들, 그리고 저희 출판사 편집팀에서는 무엇보다도 독자에게 가장 적합한 학습환경을 제공하는 것이 최우선 과제였습니다.
이 책의 두 권 세트에서 총괄적으로 다루는 내용은 다음과 같습니다.
1. 배경과 개념: 유닉스, C, 리눅스의 역사와 유닉스 표준 개요(Vol. I, 1장), 리눅스와 유닉스 개념에 대한 프로그래머 위주의 개론(Vol. I, 2장), 리눅스와 유닉스상에서의 시스템 프로그래밍을 위한 기본 개념(Vol. I, 3장)
2. 시스템 프로그래밍 인터페이스의 기본 기능: 파일 I/O(Vol. I, 4장과 5장), 프로세스(Vol. I, 6장), 메모리 할당(Vol. I, 7장), 사용자와 그룹(Vol. I, 8장), 프로세스 자격증명(Vol. I, 9장), 시간(Vol. I, 10장), 시스템 한도와 옵션(Vol. I, 11장), 시스템과 프로세스 정보 읽기(Vol. I, 12장)
3. 시스템 프로그래밍 인터페이스의 고급 기능: 파일 I/O 버퍼링(Vol. I, 13장), 파일 시스템(Vol. I, 14장), 파일 속성(Vol. I, 15장), 확장 속성(Vol. I, 16장), 접근 제어 목록(Vol. I, 17장), 디렉토리와 링크(Vol. I, 18장), 파일 이벤트 감시(Vol. I, 19장), 시그널(Vol. I, 20~22장), 타이머(Vol. I, 23장)
4. 프로세스, 프로그램, 스레드: 프로세스 생성, 프로세스 종료, 자식 프로세스 감시, 프로그램 실행(Vol. I, 24~28장), POSIX 스레드(Vol. II, 1~5장)
5. 프로세스와 프로그램 관련 고급 주제: 프로세스 그룹, 세션, 작업 제어(Vol. I, 29장), 프로세스 우선순위와 스케줄링(Vol. I, 30장). 프로세스 자원(Vol. I, 31장), 데몬(Vol. I, 32장), 안전한 특권 프로그램 작성(Vol. I, 33장), 능력(Vol. I, 34장), 로그인 계정 관리(Vol. I, 35장), 공유 라이브러리(Vol. I, 36~37장)
6. IPCinterprocess communication: IPC 개요(Vol. II, 6장), 파이프와 FIFO(Vol. II, 7장), 시스템V IPC(메시지 큐, 세마포어, 공유 메모리, Vol. II, 8장~11장), 메모리 매핑(Vol. II, 12장), 가상 메모리(Vol. II, 13장), POSIX IPC(메시지 큐, 세마포어, 공유
메모리, Vol. II, 14~17장), 파일 잠금(Vol. II, 18장)
7. 소켓과 네트워크 프로그래밍: IPC, 소켓을 이용한 네트워크 프로그래밍(Vol. II, 19~24장)
8. I/O 관련 고급 주제: 터미널(Vol. II, 25장), 대체 I/O 모델(Vol. II, 26장), 가상 터미널(Vol.II, 27장)
전 세계에서 최초로 번역 출간되는 한국어판
이 책은 특히 거의 1년 반 남짓의 오랜 번역 기간이 걸렸음에도, 세계에서 최초로 출간되는 번역서로 이름을 올리게 됐습니다. 이에 관해서는 저자 마이클 커리스크 씨가 자신의 블로그에 글을 올려 전 세계 독자들에게 기쁜 소식을 알리기도 했습니다.
▶▷ Korean translation of TLPI available soon
이 책을 번역하는 과정에서 큰 기여를 해주시고 열심히 노력해주신 역자분들 김기주, 김영주, 우정은, 지영민, 채원석, 황진호 님께 진심으로 감사의 말씀을 전합니다. 특히 이 장대한 프로젝트의 총감독으로서 방향을 잘 잡아주시고 모든 노력을 아끼지 않은 김기주 님께는 특히 더 깊은 감사말씀을 전합니다. 여러분의 노력이 우리나라 리눅스 프로그래머들께 큰 기여가 될 수 있으리라 생각합니다. 고맙습니다. 모두 고생 많으셨습니다.
마지막으로 저자 마이클 커리스크가 한국의 독자들에게 보내는 인사를 전하며 마무리합니다.
『The Linux Programming Interface』 한국 독자 여러분께 인사를 전합니다.
했지만, 저자분과 역자분들, 그리고 저희 출판사 편집팀에서는 무엇보다도 독자에게 가장 적합한 학습환경을 제공하는 것이 최우선 과제였습니다.
이 책의 두 권 세트에서 총괄적으로 다루는 내용은 다음과 같습니다.
1. 배경과 개념: 유닉스, C, 리눅스의 역사와 유닉스 표준 개요(Vol. I, 1장), 리눅스와 유닉스 개념에 대한 프로그래머 위주의 개론(Vol. I, 2장), 리눅스와 유닉스상에서의 시스템 프로그래밍을 위한 기본 개념(Vol. I, 3장)
2. 시스템 프로그래밍 인터페이스의 기본 기능: 파일 I/O(Vol. I, 4장과 5장), 프로세스(Vol. I, 6장), 메모리 할당(Vol. I, 7장), 사용자와 그룹(Vol. I, 8장), 프로세스 자격증명(Vol. I, 9장), 시간(Vol. I, 10장), 시스템 한도와 옵션(Vol. I, 11장), 시스템과 프로세스 정보 읽기(Vol. I, 12장)
3. 시스템 프로그래밍 인터페이스의 고급 기능: 파일 I/O 버퍼링(Vol. I, 13장), 파일 시스템(Vol. I, 14장), 파일 속성(Vol. I, 15장), 확장 속성(Vol. I, 16장), 접근 제어 목록(Vol. I, 17장), 디렉토리와 링크(Vol. I, 18장), 파일 이벤트 감시(Vol. I, 19장), 시그널(Vol. I, 20~22장), 타이머(Vol. I, 23장)
4. 프로세스, 프로그램, 스레드: 프로세스 생성, 프로세스 종료, 자식 프로세스 감시, 프로그램 실행(Vol. I, 24~28장), POSIX 스레드(Vol. II, 1~5장)
5. 프로세스와 프로그램 관련 고급 주제: 프로세스 그룹, 세션, 작업 제어(Vol. I, 29장), 프로세스 우선순위와 스케줄링(Vol. I, 30장). 프로세스 자원(Vol. I, 31장), 데몬(Vol. I, 32장), 안전한 특권 프로그램 작성(Vol. I, 33장), 능력(Vol. I, 34장), 로그인 계정 관리(Vol. I, 35장), 공유 라이브러리(Vol. I, 36~37장)
6. IPCinterprocess communication: IPC 개요(Vol. II, 6장), 파이프와 FIFO(Vol. II, 7장), 시스템V IPC(메시지 큐, 세마포어, 공유 메모리, Vol. II, 8장~11장), 메모리 매핑(Vol. II, 12장), 가상 메모리(Vol. II, 13장), POSIX IPC(메시지 큐, 세마포어, 공유
메모리, Vol. II, 14~17장), 파일 잠금(Vol. II, 18장)
7. 소켓과 네트워크 프로그래밍: IPC, 소켓을 이용한 네트워크 프로그래밍(Vol. II, 19~24장)
8. I/O 관련 고급 주제: 터미널(Vol. II, 25장), 대체 I/O 모델(Vol. II, 26장), 가상 터미널(Vol.II, 27장)
전 세계에서 최초로 번역 출간되는 한국어판
이 책은 특히 거의 1년 반 남짓의 오랜 번역 기간이 걸렸음에도, 세계에서 최초로 출간되는 번역서로 이름을 올리게 됐습니다. 이에 관해서는 저자 마이클 커리스크 씨가 자신의 블로그에 글을 올려 전 세계 독자들에게 기쁜 소식을 알리기도 했습니다.
▶▷ Korean translation of TLPI available soon
이 책을 번역하는 과정에서 큰 기여를 해주시고 열심히 노력해주신 역자분들 김기주, 김영주, 우정은, 지영민, 채원석, 황진호 님께 진심으로 감사의 말씀을 전합니다. 특히 이 장대한 프로젝트의 총감독으로서 방향을 잘 잡아주시고 모든 노력을 아끼지 않은 김기주 님께는 특히 더 깊은 감사말씀을 전합니다. 여러분의 노력이 우리나라 리눅스 프로그래머들께 큰 기여가 될 수 있으리라 생각합니다. 고맙습니다. 모두 고생 많으셨습니다.
마지막으로 저자 마이클 커리스크가 한국의 독자들에게 보내는 인사를 전하며 마무리합니다.
『The Linux Programming Interface』 한국 독자 여러분께 인사를 전합니다.
『The Linux Programming Interface』(한국어판 제목: 『리눅스 API의 모든 것』)는 리눅스 시스템 프로그래밍 API를 거의 모두 설명한 책으로서 전통적인 서버, 메인프레임, 데스크탑 시스템부터 근래 리눅스를 사용하는 임베디드 디바이스에 이르기까지 광범위한 리눅스 플랫폼에 적용할 수 있습니다. 뿐만 아니라 리눅스 커널이 안드로이드의 심장부를 이루고 있기 때문에, 이 책 내용의 대부분은 안드로이드 디바이스 상의 프로그래밍에도 응용할 수 있습니다.
이 책의 영문판은 2010년 말에 출간되었습니다. 이후로 9개의 새로운 리눅스 커널 버전이 릴리스되었습니다(버전 2.6.36부터 3.4까지). 그럼에도 영문판과 이 한국어판의 내용은 여전히 최신에 가깝고, 앞으로도 수년 동안 유효할 것입니다. 그 주된 이유는 리눅스 커널의 개발이 매우 빠르지만, 커널-사용자 공간 API의 변경 속도는 매우 느리기 때문입니다(이는 커널이 사용자 공간 응용프로그램의 ‘안정적인’ 기반을 제공하도록 설계된다는 사실의 당연한 결과입니다). 따라서 최근 9개의 커널 버전을 보면, 커널-사용자 공간 API의 변경은 비교적 적었음을 알 수 있습니다. 더욱이 발생한 변경들도 이 책에 설명된 기존 기능의 ‘수정’보다는 이 책에 설명된 인터페이스에 ‘추가’되는 형태를 띱니다(다시 한 번 말하지만, 이는 커널 설계 과정의 자연적인 결과로, 리눅스 커널 개발자들은 ‘기존’ 사용자 공간 API를 깨뜨리지 않기 위해 엄청나게 애씁니다). 궁금한 독자들은 저의 웹사이트 http://man7.org/tlpi/api_changes/에서 영문판이 출판된 이래의 사용자 공간 API 변경 사항들(영문으로 되어 있음)을 찾아볼 수 있습니다.
한국어판의 독자들은 영문판과 한국어판 사이에 약간의 구조적인 차이가 있음을 참조하시면 좋겠습니다. 가장 두드러진 차이는 영문판이 한 권으로 출간된 반면, 한국어판은 한국어로 옮기는 과정에서 책의 분량이 늘어난 이유 때문에 부득이하게 두 권으로 출간된 점입니다. 그 과정에서 몇몇 장들의 순서가 약간 바뀌었습니다. POSIX 스레드를 설명한 5개의 장은 뒤쪽으로 이동하여 한국어판 2권(Vol.2)의 첫 장들로 구성되었습니다(두 권으로 나눌 경우, 저와 출판사는 이렇게 순서를 바꾸는 것이 더 합리적이라고 서로 동의했습니다).
마지막으로, 저의 책이 다른 언어로 번역되는 것은 제게는 크나큰 영광입니다. 제 책에 대한 다수의 번역 작업이 각국에서 현재 진행 중이지만, 한국어판이 세계에서 최초로 출간되는 번역서로 이름을 올렸습니다. 1,500페이지가 넘는 분량을 번역하는 일은 대단한 과업입니다. 멋진 번역을 만들어낸, 부지런하고 빠르게 작업해준 출판사와 번역 팀에게 감사합니다. 저의 작업물과, 이 책을 옮겨 준 번역 팀의 좋은 글과, 영문판에 도움을 준 여러 관계자분들의 노고가 한국어판 독자들에게 많은 도움이 되길 바랍니다.
- 2012년 6월, 독일 뮌헨에서
마이클 커리스크 드림
이 책의 영문판은 2010년 말에 출간되었습니다. 이후로 9개의 새로운 리눅스 커널 버전이 릴리스되었습니다(버전 2.6.36부터 3.4까지). 그럼에도 영문판과 이 한국어판의 내용은 여전히 최신에 가깝고, 앞으로도 수년 동안 유효할 것입니다. 그 주된 이유는 리눅스 커널의 개발이 매우 빠르지만, 커널-사용자 공간 API의 변경 속도는 매우 느리기 때문입니다(이는 커널이 사용자 공간 응용프로그램의 ‘안정적인’ 기반을 제공하도록 설계된다는 사실의 당연한 결과입니다). 따라서 최근 9개의 커널 버전을 보면, 커널-사용자 공간 API의 변경은 비교적 적었음을 알 수 있습니다. 더욱이 발생한 변경들도 이 책에 설명된 기존 기능의 ‘수정’보다는 이 책에 설명된 인터페이스에 ‘추가’되는 형태를 띱니다(다시 한 번 말하지만, 이는 커널 설계 과정의 자연적인 결과로, 리눅스 커널 개발자들은 ‘기존’ 사용자 공간 API를 깨뜨리지 않기 위해 엄청나게 애씁니다). 궁금한 독자들은 저의 웹사이트 http://man7.org/tlpi/api_changes/에서 영문판이 출판된 이래의 사용자 공간 API 변경 사항들(영문으로 되어 있음)을 찾아볼 수 있습니다.
한국어판의 독자들은 영문판과 한국어판 사이에 약간의 구조적인 차이가 있음을 참조하시면 좋겠습니다. 가장 두드러진 차이는 영문판이 한 권으로 출간된 반면, 한국어판은 한국어로 옮기는 과정에서 책의 분량이 늘어난 이유 때문에 부득이하게 두 권으로 출간된 점입니다. 그 과정에서 몇몇 장들의 순서가 약간 바뀌었습니다. POSIX 스레드를 설명한 5개의 장은 뒤쪽으로 이동하여 한국어판 2권(Vol.2)의 첫 장들로 구성되었습니다(두 권으로 나눌 경우, 저와 출판사는 이렇게 순서를 바꾸는 것이 더 합리적이라고 서로 동의했습니다).
마지막으로, 저의 책이 다른 언어로 번역되는 것은 제게는 크나큰 영광입니다. 제 책에 대한 다수의 번역 작업이 각국에서 현재 진행 중이지만, 한국어판이 세계에서 최초로 출간되는 번역서로 이름을 올렸습니다. 1,500페이지가 넘는 분량을 번역하는 일은 대단한 과업입니다. 멋진 번역을 만들어낸, 부지런하고 빠르게 작업해준 출판사와 번역 팀에게 감사합니다. 저의 작업물과, 이 책을 옮겨 준 번역 팀의 좋은 글과, 영문판에 도움을 준 여러 관계자분들의 노고가 한국어판 독자들에게 많은 도움이 되길 바랍니다.
- 2012년 6월, 독일 뮌헨에서
마이클 커리스크 드림
크리에이티브 커먼즈 라이센스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.