HOME > Detail View

Detail View

리눅스 API의 모든 것 (Loan 85 times)

Material type
단행본
Personal Author
Kerrisk, Michael, 1961- 김기주, 역 김영주, 역 우정은, 역 지영민, 역 채원석, 역 황진호, 역
Title Statement
리눅스 API의 모든 것 / 마이클 커리스크 지음 ; 김기주 [외] 옮김
Publication, Distribution, etc
의왕 :   에이콘,   2012  
Physical Medium
2책 : 삽화 ; 26 cm
Series Statement
에이콘 오픈소스 프로그래밍 시리즈 ;16-17
Varied Title
(The) Linux programming interface : a Linux and UNIX system programming handbook
ISBN
9788960773196 (v.1) 9788960773202 (v.2) 9788960771031 (set)
General Note
공역자: 김영주, 우정은, 지영민, 채원석, 황진호  
Content Notes
1. 기초 리눅스 API : 파일, 메모리, 프로세스, 시그널, 타이머 (1117 p.) -- 2. 고급 리눅스 API : 스레드, IPC, 소켓, 고급 I/O (849 p.)
Bibliography, Etc. Note
참고문헌과 색인, 부록수록
Subject Added Entry-Topical Term
Linux UNIX (Computer file) Operating systems (Computers)
000 01553camcc2200445 c 4500
001 000045714509
005 20120807141215
007 ta
008 120806s2012 ggka b 001c kor
020 ▼a 9788960773196 (v.1) ▼g 94560
020 ▼a 9788960773202 (v.2) ▼g 94560
020 1 ▼a 9788960771031 (set)
035 ▼a (KERIS)BIB000012853393
040 ▼a 211062 ▼c 211062 ▼d 211064 ▼d 211064 ▼d 211009
041 1 ▼a kor ▼h eng
082 0 0 ▼a 005.4/32 ▼2 22
085 ▼a 005.432 ▼2 DDCK
090 ▼a 005.432 ▼b 2012
100 1 ▼a Kerrisk, Michael, ▼d 1961-
245 1 0 ▼a 리눅스 API의 모든 것 / ▼d 마이클 커리스크 지음 ; ▼e 김기주 [외] 옮김
246 1 9 ▼a (The) Linux programming interface : ▼b a Linux and UNIX system programming handbook
246 3 ▼a 리눅스 에이피아이의 모든 것
260 ▼a 의왕 : ▼b 에이콘, ▼c 2012
300 ▼a 2책 : ▼b 삽화 ; ▼c 26 cm
440 0 0 ▼a 에이콘 오픈소스 프로그래밍 시리즈 ; ▼v 16-17
500 ▼a 공역자: 김영주, 우정은, 지영민, 채원석, 황진호
504 ▼a 참고문헌과 색인, 부록수록
505 ▼n 1. ▼t 기초 리눅스 API : 파일, 메모리, 프로세스, 시그널, 타이머 ▼g (1117 p.) -- ▼n 2. ▼t 고급 리눅스 API : 스레드, IPC, 소켓, 고급 I/O ▼g (849 p.)
650 0 ▼a Linux
650 0 ▼a UNIX (Computer file)
650 0 ▼a Operating systems (Computers)
700 1 ▼a 김기주, ▼e
700 1 ▼a 김영주, ▼e
700 1 ▼a 우정은, ▼e
700 1 ▼a 지영민, ▼e
700 1 ▼a 채원석, ▼e
700 1 ▼a 황진호, ▼e
900 1 0 ▼a 커리스크, 마이클, ▼e
945 ▼a KLPA

No. Location Call Number Accession No. Availability Due Date Make a Reservation Service
No. 1 Location Science & Engineering Library/Sci-Info(Stacks1)/ Call Number 005.432 2012 1 Accession No. 121220763 Availability Available Due Date Make a Reservation Service B M
No. 2 Location Science & Engineering Library/Sci-Info(Stacks1)/ Call Number 005.432 2012 1 Accession No. 121220765 Availability Available Due Date Make a Reservation Service B M
No. 3 Location Science & Engineering Library/Sci-Info(Stacks1)/ Call Number 005.432 2012 2 Accession No. 121220762 Availability Available Due Date Make a Reservation Service B M
No. 4 Location Science & Engineering Library/Sci-Info(Stacks1)/ Call Number 005.432 2012 2 Accession No. 121220764 Availability Available Due Date Make a Reservation Service B M
No. 5 Location Sejong Academic Information Center/Science & Technology/ Call Number 005.432 2012 1 Accession No. 151310362 Availability Available Due Date Make a Reservation Service
No. 6 Location Sejong Academic Information Center/Science & Technology/ Call Number 005.432 2012 2 Accession No. 151310363 Availability Available Due Date Make a Reservation Service
No. Location Call Number Accession No. Availability Due Date Make a Reservation Service
No. 1 Location Science & Engineering Library/Sci-Info(Stacks1)/ Call Number 005.432 2012 1 Accession No. 121220763 Availability Available Due Date Make a Reservation Service B M
No. 2 Location Science & Engineering Library/Sci-Info(Stacks1)/ Call Number 005.432 2012 1 Accession No. 121220765 Availability Available Due Date Make a Reservation Service B M
No. 3 Location Science & Engineering Library/Sci-Info(Stacks1)/ Call Number 005.432 2012 2 Accession No. 121220762 Availability Available Due Date Make a Reservation Service B M
No. 4 Location Science & Engineering Library/Sci-Info(Stacks1)/ Call Number 005.432 2012 2 Accession No. 121220764 Availability Available Due Date Make a Reservation Service B M
No. Location Call Number Accession No. Availability Due Date Make a Reservation Service
No. 1 Location Sejong Academic Information Center/Science & Technology/ Call Number 005.432 2012 1 Accession No. 151310362 Availability Available Due Date Make a Reservation Service
No. 2 Location Sejong Academic Information Center/Science & Technology/ Call Number 005.432 2012 2 Accession No. 151310363 Availability Available Due Date Make a Reservation Service

Contents information

Book Introduction

리눅스에서 프로그램을 작성할 때 사용하는 시스템 호출과 라이브러리 함수를 설명한 책으로, 해당 함수를 사용할 수 있는 리눅스 버전, 버전별 차이 등을 꼼꼼하게 정리했다. 워낙 방대한 내용이라 1권과 2권으로 나눠 구성했으며, 1권은 기초편으로, 리눅스 프로그래밍에서 흔히 쓰이는 파일 관리, 메모리 관리, 프로세스 관리, 시그널 처리, 타이머 사용법 등을 다룬다.

리눅스와 유닉스 시스템 프로그래밍 인터페이스를 빠짐없이 다룬 최고의 안내서!

『리눅스 API의 모든 것』은 리눅스와 유닉스 프로그래밍 인터페이스(리눅스나 유닉스 시스템에서 동작하는 거의 모든 응용 프로그램이 사용하는 인터페이스)을 위한 최고의 안내서다.

리눅스 프로그래밍 전문가 마이클 커리스크는 이 권위 있는 책에서, 시스템 프로그래밍 기술을 마스터하는 데 필요한 시스템 호출과 라이브러리 함수를 자세히 설명하며, 이에 덧붙여 명확하고 완전한 예제 프로그램을 제공한다.

이 책에서는 1권과 2권 통틀어 500개가 넘는 시스템 호출과 라이브러리 함수, 200개가 넘는 예제 프로그램, 88개의 표, 115개의 다이어그램에 대한 설명이 들어 있으며, 1권에서는 다음과 같은 내용을 설명한다.

■ 파일을 효율적으로 읽고 쓰기
■ 시그널, 클록, 타이머 사용법
■ 프로세스를 만들고 프로그램 실행하기
■ 안전한 프로그램 작성법
■ 공유 라이브러리 만들고 사용하기

『리눅스 API의 모든 것』이 epoll, inotify, /proc 파일 시스템 등 수많은 리눅스 고유 기능을 다루지만, 유닉스 표준(POSIX.1-2001/SUSv3와 POSIX.1-2008/SUSv4)을 강조하기 때문에 여타 유닉스 플랫폼에서 작업하는 프로그래머들에게도 마찬가지로 가치가 크다.

『리눅스 API의 모든 것』은 리눅스와 유닉스 프로그래밍 인터페이스를 다룬 가장 포괄적인 책이며, 새로운 고전이 되리라 믿어 의심치 않는다.


★ 이 책의 대상 독자 ★

● 리눅스나 기타 유닉스, 기타 POSIX 호환 시스템용 응응 프로그램을 작성하는 프로그래머와 소프트웨어 설계자
● 리눅스와 기타 유닉스 구현 간이나 리눅스와 기타 운영체제 간에 응용 프로그램을 이식하는 프로그래머
● 리눅스/유닉스 프로그래밍 인터페이스와, 시스템 소프트웨어의 다양한 부분이 어떻게 구현됐는지를 좀 더 잘 이해하고자 하는 시스템 관리자와 '파워 유저'


Information Provided By: : Aladin

Author Introduction

마이클 커리스크(지은이)

20년 이상 유닉스 시스템을 사용하고 프로그래밍을 했으며, 유닉스 시스템 프로그램을 주제로 한 많은 강의 경험이 있다. 2004년부터 리눅스 커널과 glibc 프로그래밍 API를 설명하는 매뉴얼 페이지 프로젝트를 관리했다. 250개가 넘는 매뉴얼 페이지를 작성했거나 공동 작성했고, 새로운 리눅스 커널/사용자 공간 인터페이스의 테스트와 설계 리뷰에 활발히 참여하고 있다. 마이클은 독일의 뮌헨에서 가족과 함께 살고 있다.

김기주(옮긴이)

포스텍 컴퓨터공학과와 동대학원을 졸업한 후 LG전자와 썬 마이크로시스템즈를 거쳐 지금은 엘라스틱에서 엘라스틱서치 사용자들을 돕고 있다. https://www.elastic.co/kr/blog에 다수의 블로그 글을 게재했으며, 요즘은 집에서 근무하는 틈틈이 아이들 온라인 수업을 도와주느라 정신이 없다. 공저로 『Security PLUS for UNIX』(영진닷컴, 2000), 역서로 『리눅스 API의 모든 것』(에이콘, 2012), 『(개정3판) 리눅스 실전 가이드』(에이콘, 2014), 『한눈에 빠져드는 셸 스크립트 2/e』(에이콘, 2018), 『임베디드 리눅스 프로그래밍 완전정복 2/e』(에이콘, 2019) 등이 있다.

채원석(옮긴이)

포항공과대학교 컴퓨터공학과와 동 대학원을 졸업한 후 미국 시카고의 TTIC에서 프로그래밍 언어 전공으로 박사 학위를 받았다. 현재 마이크로소프트 사에서 컴파일러를 개발하고 있다. 『실시간 UML: 임베디드 시스템에서 활용하는』(에이콘출판, 2008)을 공동 번역했다.

우정은(옮긴이)

인하대학교 컴퓨터공학과를 졸업하고 LG전자, 썬 마이크로시스템즈, 오라클 등에서 모바일 제품 관련 개발을 하다가 현재는 뉴질랜드 웰링턴에 있는 Xero에서 모바일 앱 개발자로 새로운 인생을 즐기고 있다. 2010년 아이폰의 매력에 빠져들면서 번역과 개발을 취미로 삼고 꾸준히 서적을 번역한다. 옮긴 책으로는 『플러터 인 액션』, 『처음 배우는 스위프트』, 『실전 자바 소프트웨어 개발』, 『모던 자바 인 액션』(이상 한빛미디어) 등이 있다.

황진호(옮긴이)

국내에서 학업을 마치고 1년여 동안 미국의 연구 기관에서 방문 연구원으로 재직했다. 한국으로 돌아와 포스코 ICT에서 통신 시스템 소프트웨어 개발자로 3년 동안 근무했다. 그 후 미국의 조지 워싱턴 대학교의 컴퓨터 사이언스 학과에서 박사 과정을 마쳤고, 지금은 미국 뉴욕에 위치한 IBM T.J. 왓슨 리서치 센터(IBM T.J. Watson Research Center)에서 클라우드 컴퓨팅과 빅데이터에 관한 연구를 진행 중이다. 에이콘출판사에서 펴낸 『Concurrent Programming on Windows 한국어판』(2012), 『Creating iOS 5 Apps Develop and Design 한국어판』(2012), 『Programming iOS 5 한국어판』(2012), 『Learning PHP, MySQL & JavaScript With jQuery, CSS & HTML5, 4th Edition』(2016)을 번역했고, 『리눅스 API의 모든 것』(2012)을 공역했다.

김영주(옮긴이)

건국대학교를 졸업한 뒤 공채 2기로 한글과컴퓨터에 입사해, 한컴고객지원센터장을 역임하고, 한컴오피스, Anti-Virus, 통합보안 등의 마케팅을 담당했다. 지금은 보안 소프트웨어 업체에서 Business Development & Marketing을 하고 있다. 「마이크로소프트웨어」, 「PCPLUS」 같은 컴퓨터월간지에서 필자로 활동했으며, 저서로는 한컴고객지원센터센터 공동 저술한 『따라해보세요, 한글 815 특별판』(한컴프레스, 1998)이 있다.

지영민(옮긴이)

yangsamy@gmail.com 분당 야탑 영장산 산자락에 자리 잡은 전자부품연구원에서 마늘과 쑥을 먹으며 곰에서 사람으로 환골탈태하여 세상 밖으로 나가기 위해 사물 인터넷 빅데이터 연구에 몰두하면서 인고의 시간을 보내고 있다. 마음은 자유로운 영혼이나 자본주의의 노예에서 벗어나지 못함을 한탄하며, 실현 여부를 가늠할 수 없는 미래의 풍류낭 같은 인생을 꿈꾸며 오늘도 연구에 매진하고 있다. 에이콘 출판사에서 출간한 『리눅스 API의 모든 것』(2012)을 번역했고 데이터 전문가 지식포털(dbguide.net)에서 '사물인터넷: 디지털 오감을 넘어 육감으로...'라는 주제로 칼럼을 연재하고 있다.

Information Provided By: : Aladin

Table of Contents

[volume. vol.1]----------
목차
이 책에 쏟아진 찬사 = 4
한국어판 출간에 부쳐 = 6
저자 소개 = 9
저자 서문 = 10
감사의 글 = 12
옮긴이 소개 = 18
옮긴이의 말 = 22
들어가며 = 46
1장 역사와 표준 = 53
 1.1 유닉스와 C의 간략한 역사 = 54
 1.2 리눅스의 간략한 역사 = 58
  1.2.1 GNU 프로젝트 = 58
  1.2.2 리눅스 커널 = 59
 1.3 표준화 = 64
  1.3.1 C 프로그래밍 언어 = 64
  1.3.2 최초의 POSIX 표준 = 65
  1.3.3 X/Open Company와 오픈 그룹 = 67
  1.3.4 SUSv3와 POSIX.1-2001 = 68
  1.3.5 SUSv4와 POSIX.1-2008 = 70
  1.3.6 유닉스 표준 연대표 = 71
  1.3.7 구현 표준 = 73
  1.3.8 리눅스, 표준, 리눅스 스탠더드 베이스 = 73
 1.4 정리 = 75
2장 기본 개념 = 77
 2.1 핵심 운영체제: 커널 = 77
 2.2 셸 = 81
 2.3 사용자와 그룹 = 83
 2.4 단일 디렉토리 계층구조, 디렉토리, 링크, 파일 = 84
 2.5 파일 I/O 모델 = 87
 2.6 프로그램 = 88
 2.7 프로세스 = 89
 2.8 메모리 매핑 = 94
 2.9 정적 라이브러리와 공유 라이브러리 = 95
 2.10 프로세스 간 통신과 동기화 = 96
 2.11 시그널 = 97
 2.12 스레드 = 98
 2.13 프로세스 그룹과 셸 작업 제어 = 98
 2.14 세션, 제어 터미널, 제어 프로세스 = 99
 2.15 가상 터미널 = 100
 2.16 날짜와 시간 = 100
 2.17 클라이언트/서버 아키텍처 = 101
 2.18 실시간 = 102
 2.19 /proc 파일 시스템 = 103
 2.20 정리 = 103
3장 시스템 프로그래밍 개념 = 105
 3.1 시스템 호출 = 106
 3.2 라이브러리 함수 = 109
 3.3 표준 C 라이브러리: GNU C 라이브러리(glib) = 110
 3.4 시스템 호출과 라이브러리 함수의 에러 처리 = 111
 3.5 이 책의 예제 프로그램 = 114
  3.5.1 명령행 옵션과 인자 = 114
  3.5.2 공통 함수와 헤더 파일 = 115
 3.6 이식성 이슈 = 127
  3.6.1 기능 테스트 매크로 = 127
  3.6.2 시스템 데이터형 = 130
  3.6.3 기타 이식성 이슈 = 133
 3.7 정리 = 135
 3.8 연습문제 = 136
4장 파일 I/O: 범용 I/O 모델 = 137
 4.1 개요 = 138
 4.2 I/O의 범용성 = 140
 4.3 파일 열기: open() = 141
  4.3.1 open()의 flags 인자 = 143
  4.3.2 open()의 에러 = 147
  4.3.3 creat() 시스템 호출 = 148
 4.4 파일 읽기: read() = 149
 4.5 파일에 쓰기: write() = 150
 4.6 파일 닫기: close() = 151
 4.7 파일 오프셋 변경: lseek() = 152
 4.8 범용 I/O 모델 외의 오퍼레이션: ioctl() = 157
 4.9 정리 = 158
 4.10 연습문제 = 159
5장 파일 I/O: 더 자세히 = 161
 5.1 원자성과 경쟁 상태 = 162
 5.2 파일 제어 오퍼레이션: fcntl() = 166
 5.3 파일 상태 플래그 열기 = 166
 5.4 파일 디스크립터와 열려 있는 파일의 관계 = 168
 5.5 파일 디스크립터 복사하기 = 170
 5.6 지정된 오프셋에서의 파일 I/O: pread()와 pwrite() = 173
 5.7 스캐터-개더 I/O: readv()와 writev() = 174
 5.8 파일 잘라내기: truncate()와 ftruncate() = 178
 5.9 비블로킹 I/O = 179
 5.10 큰 파일에 대한 I/O = 180
 5.11 /dev/fd 디렉토리 = 184
 5.12 임시 파일 만들기 = 185
 5.13 정리 = 187
 5.14 연습문제 = 188
6장 프로세스 = 191
 6.1 프로세스와 프로그램 = 191
 6.2 프로세스 ID와 부모 프로세스 ID = 193
 6.3 프로세스의 메모리 레이아웃 = 194
 6.4 가상 메모리 관리 = 198
 6.5 스택과 스택 프레임 = 201
 6.6 명령행 인자(argc, argv) = 203
 6.7 환경 변수 목록 = 205
 6.8 비지역 goto 수행: setjmp()와 longjmp() = 213
 6.9 정리 = 220
 6.10 연습문제 = 221
7장 메모리 할당 = 223
 7.1 힙에 메모리 할당하기 = 223
  7.1.1 프로그램 브레이크 조정하기: brk()와 sbrk() = 224
  7.1.2 힙에 메모리 할당하기: malloc()과 free() = 225
  7.1.3 malloc()과 free()의 구현 = 229
  7.1.4 힙에 메모리를 할당하는 그 밖의 방법 = 233
 7.2 스택에 메모리 할당하기: alloca() = 237
 7.3 정리 = 239
 7.4 연습문제 = 239
8장 사용자와 그룹 = 241
 8.1 패스워드 파일: /etc/passwd = 242
 8.2 섀도 패스워드 파일: /etc/shadow = 243
 8.3 그룹 파일: /etc/group = 244
 8.4 사용자와 그룹 정보 읽기 = 246
 8.5 패스워드 암호화와 사용자 인증 = 252
 8.6 정리 = 257
 8.7 연습문제 = 257
9장 프로세스 자격증명 = 259
 9.1 실제 사용자 ID와 실제 그룹 ID = 260
 9.2 유효 사용자 ID와 유효 그룹 ID = 260
 9.3 set-user-ID와 set-group-ID 프로그램 = 260
 9.4 저장된 Set-User-ID와 저장된 Set-Group-ID = 263
 9.5 파일 시스템 사용자 ID와 파일 시스템 그룹 ID = 264
 9.6 추가 그룹 ID = 265
 9.7 프로세스 자격증명 읽고 수정하기 = 265
  9.7.1 실제, 유효, 저장된 ID 읽고 바꾸기 = 265
  9.7.2 파일 시스템 ID 읽고 바꾸기 = 272
  9.7.3 추가 그룹 ID 읽고 바꾸기 = 273
  9.7.4 프로세스 자격증명을 바꾸는 호출에 대한 요약 = 275
  9.7.5 예제: 프로세스 자격증명 출력하기 = 276
 9.8 정리 = 278
 9.9 연습문제 = 279
10장 시간 = 281
 10.1 달력 시간 = 282
 10.2 시간 변환 함수 = 284
  10.2.1 time_t를 출력 가능한 형태로 변환하기 = 284
  10.2.2 time_t와 분해된 시간 사이의 변환 = 285
  10.2.3 분해된 시간과 출력 가능한 형태 사이의 변환 = 287
 10.3 시간대 = 295
 10.4 로케일 = 298
 10.5 시스템 클록 갱신하기 = 303
 10.6 소프트웨어 클록 = 305
 10.7 프로세스 시간 = 305
 10.8 정리 = 310
 10.9 연습문제 = 310
11장 시스템 한도와 옵션 = 311
 11.1 시스템 한도 = 312 
 11.2 실행 시에 시스템 한도(그리고 옵션) 구하기 = 316
 11.3 실행 시에 파일 관련 한도(그리고 옵션) 읽기 = 318
 11.4 결정되지 않은 한도 = 320
 11.5 시스템 옵션 = 321
 11.6 정리 = 323
 11.7 연습문제 = 324
12장 시스템과 프로세스 정보 = 325
 12.1 /proc 파일 시스템 = 325
  12.1.1 프로세스 정보 얻기: /proc/PID = 326
  12.1.2 /proc의 시스템 정보 = 329
  12.1.3 /proc 파일 접근 = 329
 12.2 시스템 식별: uname() = 332
 12.3 정리 = 334
 12.4 연습문제 = 335
13장 파일 I/O 버퍼링 = 337
 13.1 파일 I/O의 커널 버퍼링: 버퍼 캐시 = 337
 13.2 stdio 라이브러리 내의 버퍼링 = 342
 13.3 파일 I/O의 커널 버퍼링 제어 = 345
 13.4 I/O 버퍼링 요약 = 351
 13.5 I/O 패턴에 대한 커널 조언 = 352
 13.6 버퍼 캐시 우회: 직접 I/O = 353
 13.7 파일 I/O를 위한 라이브러리 함수와 시스템 호출의 혼합 = 357
 13.8 정리 = 358
 13.9 연습문제 = 359
14장 파일 시스템 = 361
 14.1 디바이스 특수 파일(디바이스) = 362
 14.2 디스크와 파티션 = 364
 14.3 파일 시스템 = 365
 14.4 i-노드 = 368
 14.5 가상 파일 시스템(VFS) = 371
 14.6 저널링 파일 시스템 = 372
 14.7 단일 디렉토리 계층과 마운트 지점 = 374
 14.8 파일 시스템의 마운트와 마운트 해제 = 375
  14.8.1 파일 시스템 마운트: mount() = 376
  14.8.2 파일 시스템 마운트 해제: umount()와 umount2() = 383
 14.9 고급 마운트 기능 = 385
  14.9.1 여러 마운트 지점에서 파일 시스템 마운트 = 385
  14.9.2 동일한 마운트 지점에 여러 마운트 설정 = 385
  14.9.3 마운트당 옵션인 마운트 플래그 = 386
  14.9.4 바인드 마운트 = 387
  14.9.5 재귀적 바인드 마운트 = 388
 14.10 가상 메모리 파일 시스템: tmpfs = 389
 14.11 파일 시스템 정보 획득: statvfs() = 391
 14.12 정리 = 393
 14.13 연습문제 = 395
15장 파일 속성 = 397
 15.1 파일 정보 추출: stat() = 397
 15.2 파일 타임스탬프 = 404
  15.2.1 utime()과 utimes를 이용한 파일 타임스탬프 변경 = 407
  15.2.2 utimensat()와 futimens()를 이용한 파일 타임스탬프 변경 = 409
 15.3 파일 소유권 = 411
  15.3.1 새로운 파일의 소유권 = 411
  15.3.2 파일 소유권 변경: chown(), fchown(), lchown() = 413
 15.4 파일 권한 = 415
  15.4.1 일반 파일에 대한 권한 = 416
  15.4.2 디렉토리에 대한 권한 = 419
  15.4.3 권한 검사 알고리즘 = 420
  15.4.4 파일 접근권 검사: access() = 422
  15.4.5 set-user-ID, set-group-ID, 스티키 비트 = 423
  15.4.6 프로세스 파일 모드 생성 마스크: umask() = 424
  15.4.7 파일 권한 변경: chmod()와 fchmod() = 427
 15.5 i-노드 플래그(ext2 확장 파일 속성) = 428
 15.6 정리 = 433
 15.7 연습문제 = 434
16장 확장 속성 = 437
 16.1 개요 = 437
 16.2 확장 속성 구현 세부사항 = 440
 16.3 확장 속성 조작을 위한 시스템 호출 = 441
 16.4 정리 = 446
 16.5 연습문제 = 446
17장 ACL = 447 
 17.1 개요 = 448
 17.2 ACL 권한 검사 알고리즘 = 450
 17.3 ACL의 길고 짧은 텍스트 형식 = 451
 17.4 ACL_MASK 엔트리와 ACL 그룹 클래스 = 452
 17.5 getfacl과 setfacl 명령 = 454
 17.6 기본 ACL과 파일 생성 = 457
 17.7 ACL 구현 제한사항 = 458
 17.8 ACL API = 459
 17.9 정리 = 469
 17.10 연습문제 = 469
18장 디렉토리와 링크 = 471
 18.1 디렉토리와 (하드) 링크 = 472
 18.2 심볼릭(소프트) 링크 = 475
 18.3 (하드) 링크 생성과 제거: link()와 unlink() = 479
 18.4 파일이름 변경: rename() = 482
 18.5 심볼릭 링크 관련 작업: symlink()와 readlink() = 484
 18.6 디렉토리 생성과 제거: mkdir()과 rmdir() = 486
 18.7 파일이나 디렉토리 제거: remove() = 487
 18.8 디렉토리 읽기: opendir()과 readdir() = 488
 18.9 파일 트리 검색: nftw() = 495
 18.10 프로세스의 현재 작업 디렉토리 = 501
 18.11 디렉토리 파일 식별자 관련 작업 운용 = 503
 18.12 프로세스의 루트 디렉토리 변경: chroot() = 505
 18.13 경로명 결정: realpath() = 508
 18.14 경로명 문자열 파싱: dirname()과 basename() = 510
 18.15 정리 = 512
 18.16 연습문제 = 513
19장 파일 이벤트 감시 = 515
 19.1 개요 = 516
 19.2 inotify API = 517
 19.3 inotify 이벤트 = 519
 19.4 inotify 이벤트 읽기 = 521
 19.5 큐 한도와 /proc 파일 = 528
 19.6 파일 이벤트 감시의 오래된 시스템: dnotify = 528
 19.7 정리 = 529
 19.8 연습문제 = 530
20장 시그널: 기본 개념 = 531
 20.1 개념과 개요 = 532
 20.2 시그널 형식과 기본 동작 = 534
 20.3 시그널 속성 변경: signal() = 542
 20.4 시그널 핸들러 소개 = 544
 20.5 시그널 전송: kill() = 547
 20.6 프로세스 존재 여부 검사 = 549
 20.7 시그널을 보내는 그 밖의 방법: raise()와 killpg() = 550
 20.8 시그널 설명 출력 = 553
 20.9 시그널 집합 = 554
 20.10 시그널 마스크(시그널 전달 블록) = 557
 20.11 보류 중인 시그널 = 560
 20.12 시그널은 큐에 들어가지 않는다 = 560
 20.13 시그널 속성 변경: sigaction() = 565
 20.14 시그널 대기: pause() = 567
 20.15 정리 = 567
 20.16 연습문제 = 569
21장 시그널: 시그널 핸들러 = 571
 21.1 시그널 핸들러 설계 = 572
  21.1.1 시그널은 큐에 저장되지 않는다(상기하자) = 572
  21.1.2 재진입과 비동기 시그널 안전 함수 = 573
  21.1.3 전역 변수와 sig_atomic_t 데이터형 = 580
 21.2 시그널 핸들러를 종료하는 그 밖의 방법 = 581
  21.2.1 시그널 핸들러에서 비지역 goto 사용 = 581
  21.2.2 프로세스의 비정상 종료: abort() = 586
 21.3 대체 스택의 시그널 처리: sigaltstack() = 587
 21.4 SA_SIGINFO 플래그 = 591
 21.5 시스템 호출 인터럽트와 재시작 = 597
 21.6 정리 = 602
 21.7 연습문제 = 602
22장 시그널: 고급 기능 = 603
 22.1 코어 덤프 파일 = 604
 22.2 전달, 속성, 처리의 특별한 경우 = 607
 22.3 인터럽트 가능과 불가능 프로세스 수면 상태 = 608
 22.4 하드웨어 생성 시그널 = 609
 22.5 동기와 비동기 시그널 생성 = 610
 22.6 시그널 전달 시점과 순서 = 611
 22.7 signal()의 구현과 이식성 = 612
 22.8 실시간 시그널 = 614
  22.8.1 실시간 시그널 전송 = 617
  22.8.2 실시간 시그널 처리 = 619
 22.9 마스크를 이용한 시그널 대기: sigsuspend() = 624
 22.10 동기적 시그널 대기 = 629
 22.11 파일 식별자를 통한 시그널 획득 = 633
 22.12 시그널을 통한 프로세스 간 통신 = 636
 22.13 구형 시그널 API(시스템 V와 BSD) = 637
 22.14 정리 = 640
 22.15 연습문제 = 641
23장 타이머와 수면 = 643
 23.1 시간 간격 타이머 = 644
 23.2 타이머 스케줄링과 정확성 = 650
 23.3 블로킹 오퍼레이션에 타임아웃 설정 = 651
 23.4 일정 시간 동안 실행 중지(수면) = 653
  23.4.1 저해상도 수면: sleep() = 653
  23.4.2 고해상도 수면: nanosleep() = 654
 23.5 POSIX 클록 = 657
  23.5.1 클록값 추출: clock_gettime() = 657
  23.5.2 클록값 추출: clock_settime() = 659
  23.5.3 특정 프로세스나 스레드의 클록 ID 획득 = 660
  23.5.4 개선된 고해상도 수면: clock_nanosleep() = 660
 23.6 POSIX 시간 간격 타이머 = 662
  23.6.1 타이머 생성: timer_create() = 663
  23.6.2 타이머 시작과 중지: timer_settime() = 666
  23.6.3 타이머의 현재 값 추출: timer_gettime() = 667
  23.6.4 타이머 삭제: timer_delete() = 668
  23.6.5 시그널을 통한 통지 = 668
  23.6.6 타이머 오버런 = 672
  23.6.7 스레드를 통한 통지 = 674
 23.7 파일 식별자를 통해 통지하는 타이머: timerfd API = 677
 23.8 정리 = 682
 23.9 연습문제 = 683
24장 프로세스 생성 = 685
 24.1 fork(), exit(), wait(), execve() 소개 = 685
 24.2 새 프로세스의 생성: fork() = 688
  24.2.1 부모와 자식 프로세스 간의 파일 공유 = 690
  24.2.2 fork()의 메모리 시맨틱 = 694
 24.3 vfork() 시스템 호출 = 696
 24.4 fork() 후의 경쟁 상태 = 699
 24.5 시그널 동기를 통한 경쟁 상태 회피 = 702
 24.6 정리 = 705
 24.7 연습문제 = 705
25장 프로세스 종료 = 707
 25.1 프로세스 종료하기: _exit()와 exit() = 707
 25.2 프로세스 종료 자세히 들여다보기 = 709
 25.3 종료 핸들러 = 710
 25.4 fork(), stdio 버퍼, _exit()의 상호작용 = 714
 25.5 정리 = 716
 25.6 연습문제 = 717
26장 자식 프로세스 감시 = 719
 26.1 자식 프로세스 기다리기 = 719
  26.1.1 wait() 시스템 호출 = 720
  26.1.2 waitpid() 시스템 호출 = 722
  26.1.3 대기 상태값 = 724
  26.1.4 시그널 핸들러로부터 프로세스 종료 = 729
  26.1.5 waitid() 시스템 호출 = 730
  26.1.6 wait3()와 wait4() 시스템 호출 = 732
 26.2 고아와 좀비 프로세스 = 733
 26.3 SIGCHLD 시그널 = 736
  26.3.1 SIGCHLD 핸들러 설치 = 737
  26.3.2 중지된 자식에 대한 SIGCHLD 전달 = 741
  26.3.3 죽은 자식 프로세스 무시하기 = 741
 26.4 정리 = 744
 26.5 연습문제 = 744
27장 프로그램 실행 = 747
 27.1 새 프로그램 실행하기: execve() = 747
 27.2 exec() 라이브러리 함수 = 751
  27.2.1 PATH 환경 변수 = 753
  27.2.2 프로그램 인자를 리스트로 지정하기 = 755
  27.2.3 호출한 프로세스의 환경을 새 프로그램에 전달하기 = 756
  27.2.4 디스크립터가 가리키는 파일 실행하기: fexecve() = 757
 27.3 인터프리터 스크립트 = 757
 27.4 파일 디스크립터와 exec() = 762
 27.5 시그널과 exec() = 765
 27.6 셸 명령 실행하기: system() = 766
 27.7 system() 구현하기 = 770
 27.8 정리 = 778
 27.9 연습문제 = 778
28장 더 자세히 살펴보는 프로세스 생성과 프로그램 실행 = 781
 28.1 프로세스 어카운팅 = 781
 28.2 clone() 시스템 호출 = 790
  28.2.1 clone()의 flags 인자 = 795
  28.2.2 복제된 자식 프로세스를 위한 waitpid() 확장 = 804
 28.3 프로세스 생성 속도 = 805
 28.4 exec()와 fork()가 프로세스 속성에 미치는 영향 = 807
 28.5 정리 = 812
 28.6 연습문제 = 813
29장 프로세스 그룹, 세션, 작업 제어 = 815
 29.1 개요 = 816
 29.2 프로세스 그룹 = 818
 29.3 세션 = 821
 29.4 터미널 제어와 프로세스 제어 = 824
 29.5 포그라운드와 백그라운드 프로세스 그룹 = 826
 29.6 SIGHUP 시그널 = 827
  29.6.1 셸에 의한 SIGHUP 처리 = 829
  29.6.2 SIGHUP과 제어 프로세스의 종료 = 831
 29.7 작업 제어 = 834
  29.7.1 셸 내에서 작업 제어 사용 = 834
  29.7.2 작업 제어 구현 = 838
  29.7.3 작업 제어 시그널 처리 = 843
  29.7.4 고아가 된 프로세스 그룹(그리고 SIGHUP 재검토) = 848
 29.8 정리 = 853
 29.9 연습문제 = 855
30장 프로세스 우선순위와 스케줄링 = 857
 30.1 프로세스 우선순위(nice 값) = 858
 30.2 실시간 프로세스 스케줄링 개요 = 862
  30.2.1 SCHED_PR 정책 = 864
  30.2.2 SCHED_FIFO 정책 = 866
  30.2.3 SCHED_BATCH와 SCHED_IDLE 정책 = 866
 30.3 실시간 프로세스 스케줄링 API = 866
  30.3.1 실시간 우선순위 범위 = 867
  30.3.2 정책 및 우선순위의 수정과 추출 = 867
  30.3.3 CPU 소유권 포기 = 875
  30.3.4 SCHED_RR 할당 시간 = 875
 30.4 CPU 친화도 = 876
 30.5 정리 = 880
 30.6 연습문제 = 881
31장 프로세스 자원 = 883 
 31.1 프로세스 자원 사용 = 883
 31.2 프로세스 자원 한도 = 886
 31.3 구체적인 자원 한도 세부사항 = 892
 31.4 정리 = 898
 31.5 연습문제 = 898 
32장 데몬 = 901
 32.1 개요 = 901
 32.2 데몬 생성 = 902
 32.3 데몬 작성의 지침서 = 907
 32.4 데몬을 다시 초기화하기 위해 SIGHUP 사용 = 907
 32.5 syslog를 사용한 메시지와 에러 기록 = 911
  32.5.1 개요 = 911
  32.5.2 syslog API = 913
  32.5.3 /etc/syslog.conf 파일 = 919
 32.6 정리 = 920
 32.7 연습문제 = 921
33장 안전한 특권 프로그램 작성 = 923
 33.1 set-user-ID나 set-group-ID 프로그램이 필요한가? = 924
 33.2 최소 특권으로 운영하기 = 924
 33.3 프로그램 실행 시 주의사항 = 928
 33.4 중요한 정보의 노출 피하기 = 930
 33.5 프로세스 제한 = 931
 33.6 시그널과 경쟁 상태 인지 = 932
 33.7 파일 오퍼레이션과 파일 I/O 실행 시 위험성 = 933
 33.8 입력이나 환경을 믿지 말자 = 934
 33.9 버퍼 오버런 인지 = 935
 33.10 서비스 거부 공격 인지 = 937
 33.11 리턴 상태 검사와 안전하게 실패하기 = 938
 33.12 정리 = 938
 33.13 연습문제 = 939 
34장 능력 = 941
 34.1 능력을 사용하는 이유 = 941
 34.2 리눅스 능력 기능 = 942
 34.3 프로세스와 파일 능력 기능 = 942
  34.3.1 프로세스 능력 기능 = 943
  34.3.2 파일 능력 기능 = 944
  34.3.3 허가된 프로세스와 유효 능력 집합의 목적 = 948
  34.3.4 허가된 파일과 유효 능력 집합의 목적 = 948
  34.4.5 프로세스와 파일 상속 집합의 목적 = 949
  34.4.6 셸에서 파일 능력 할당과 확인 = 950
 34.4 현대적인 능력 기능 구현 = 951
 34.5 exec() 동안 프로세스 능력 기능 변경 = 952
  34.5.1 능력 기능 결합 집합 = 952
  34.5.2 root 문법 유지 = 953
 34.6 사용자 ID 변경 프로세스 능력의 효과 = 953
 34.7 프로그램적으로 프로세스 능력 변경 = 954
 34.8 능력 기능만의 환경 생성 = 959
 34.9 프로그램에 요구되는 능력 기능 찾기 = 962
 34.10 파일 능력 기능이 없는 이전의 커널과 시스템 = 963
 34.11 정리 = 966
 34.12 연습문제 = 966
35장 로그인 계정 = 967
 35.1 utmp와 wtmp 파일의 개요 = 967
 35.2 utmpx API = 968
 35.3 utmpx 구조 = 969
 35.4 utmp와 wtmp 파일에서 정보 추출 = 972
 35.5 로그인 이름 추출: getlogin() = 976
 35.6 로그인 세션을 위한 utmp와 wtmp 파일 갱신 = 977
 35.7 lastlog 파일 = 983
 35.8 정리 = 985
 35.9 연습문제 = 986
36장 공유 라이브러리 기초 = 987
 36.1 오브젝트 라이브러리 = 987
 36.2 정적 라이브러리 = 988
 36.3 공유 라이브러리 개요 = 991
 36.4 공유 라이브러리 생성과 사용(첫 번째 단계) = 992
  36.4.1 공유 라이브러리 만들기 = 993
  36.4.2 위치 독립적인 코드 = 993
  36.4.3 공유 라이브러리 사용하기 = 994
  36.4.4 공유 라이브러리의 soname = 996
 36.5 공유 라이브러리의 유용한 툴 = 999
 36.6 공유 라이브러리 버전과 이름 짓기 규칙 = 1001
 36.7 공유 라이브러리 설치하기 = 1004
 36.8 호환과 비호환 라이브러리 = 1007
 36.9 공유 라이브러리 업그레이드하기 = 1008
 36.10 오브젝트 파일에 라이브러리 검색 디렉토리 경로 지정하기 = 1009
 36.11 실행 시에 공유 라이브러리 찾기 = 1013
 36.12 실행 시 심볼 해석 = 1013
 36.13 공유 라이브러리 대신 정적 라이브러리 사용하기 = 1015
 36.14 정리 = 1016
 36.15 연습문제 = 1017
37장 공유 라이브러리의 고급 기능 = 1019
 37.1 동적으로 라이브러리 적재하기 = 1020
  37.1.1 공유 라이브러리 열기: dlopen() = 1020
  37.1.2 진단 에러: dlerror() = 1023
  37.1.3 심볼의 주소 가져오기: dlsym() = 1023
  37.1.4 공유 라이브러리 닫기: dlclose() = 1027
  37.1.5 로드된 심볼의 정보 가져오기: dladdr() = 1028
  37.1.6 주 프로그램에서 심볼 접근하기 = 1028
 37.2 심볼의 가시성 조절하기 = 1029
 37.3 링커 버전 스크립트 = 1031
  37.3.1 버전 스크립트를 통한 심볼 가시성 조절 = 1031
  37.3.2 심볼 버전 관리 = 1033
 37.4 함수의 초기화와 마무리 = 1036
 37.5 공유 라이브러리 미리 로딩하기 = 1037
 37.6 동적 링커 감시하기: LD_DEBUG = 1038
 37.7 정리 = 1040
 37.8 연습문제 = 1040
부록 A 시스템 호출 추적 = 1041
부록 B 명령행 옵션 파싱하기 = 1045
부록 C NULL 포인터 캐스팅 = 1053
부록 D 커널 설정 = 1057
부록 E 추가 정보 = 1059
부록 F 연습문제 해답 = 1067
참고문헌 = 1077
찾아보기 = 1087
[volume. vol.2]----------
목차
이 책에 쏟아진 찬사 = 4
한국어판 출간에 부쳐 = 6
저자 소개 = 9
저자 서문 = 10
감사의 글 = 12
옮긴이 소개 = 18
옮긴이의 말 = 22
들어가며 = 46
1장 스레드: 소개 = 49
 1.1. 개요 = 49
 1.2. Pthreads API의 세부 배경 지식 = 53
 1.3. 스레드 생성 = 55
 1.4. 스레드 종료 = 56
 1.5. 스레드 ID = 57
 1.6. 종료된 스레드와 조인하기 = 59
 1.7. 스레드 분리하기 = 61
 1.8. 스레드 속성 = 62
 1.9. 스레드와 프로세스의 비교 = 63
 1.10. 정리 = 64
 1.11. 연습문제 = 65
2장 스레드: 스레드 동기화 = 67
 2.1. 공유 변수 접근 보호: 뮤텍스 = 67
  2.1.1 정적으로 할당한 뮤텍스 = 72
  2.1.2 뮤텍스의 잠금과 풀림 = 72
  2.1.3 뮤텍스의 성능 = 75
  2.1.4 뮤텍스 데드락 = 76
  2.1.5 뮤텍스를 동적으로 초기화하기 = 77
  2.1.6 뮤텍스 속성 = 78
  2.1.7 뮤텍스 종류 = 78
 2.2. 상태 변화 알리기: 조건 변수 = 80
  2.2.1 정적으로 할당된 조건 변수 = 82
  2.2.2 조건 변수를 이용한 대기와 시그널 = 82
  2.2.3 조건 변수의 조건문 검사하기 = 87 
  2.2.4 예제 프로그램: 종료하는 모든 스레드와 조인하기 = 88
  2.2.5 동적으로 할당된 조건 변수 = 91
 2.3. 정리 = 92
 2.4. 연습문제 = 93
3장 스레드: 스레드 안전성과 스레드별 저장소 = 95
 3.1. 스레드 안전성(그리고 재진입성) = 95
 3.2. 1회 초기화 = 99
 3.3. 스레드별 데이터 = 100
  3.3.1 라이브러리 함수의 관점에서 본 스레드별 데이터  = 101
  3.3.2 스레드별 데이터 API 개요 = 102
  3.3.3 스레드별 데이터 API 상세 설명 = 103
  3.3.4 스레드별 데이터 API 사용하기 = 106
  3.3.5 스레드별 데이터 구현에서의 한도 = 111
 3.4. 스레드 지역 저장소 = 111
 3.5. 정리 = 113
 3.6. 연습문제 = 114
4장 스레드: 스레드 취소 = 115
 4.1. 스레드 취소하기 = 116
 4.2. 취소 상태와 종류 = 116
 4.3. 취소 지점 = 118
 4.4. 스레드 취소 요청 확인 = 121
 4.5. 클린업 핸들러 = 121
 4.6. 비동기적 취소 가능성 = 126
 4.7. 정리 = 126
5장 스레드: 기타 세부사항 = 129
 5.1. 스레드 스택 = 129
 5.2. 스레드와 시그널 = 130
  5.2.1 유닉스 시그널 모델은 어떻게 스레드에 대응되나 = 131
  5.2.2 스레드 시그널 마스크 조작하기 = 132
  5.2.3 스레드에 시그널 보내기 = 133
  5.2.4 비동기적 시그널을 적절히 다루기 = 134
 5.3. 스레드와 프로세스 제어 = 135
 5.4. 스레드 구현 모델 = 137
 5.5. POSIX 스레드의 리눅스 구현 = 139 
  5.5.1 LinuxThreads = 140
  5.5.2 NPTL = 143
  5.5.3 어떤 스레드 구현을 사용할 것인가? = 145
 5.6. Pthreads API의 고급 기능 = 147
 5.7. 정리 = 148
 5.8. 연습문제 = 149
6장 프로세스 간 통신 개요 = 151
 6.1. IPC 방법의 분류 = 151
 6.2. 통신 방법 = 153
 6.3. 동기화 방법 = 155
 6.4. IPC 방법 비교하기 = 157
 6.5. 정리 = 164
 6.6. 연습문제 = 164
7장 파이프와 FIFO = 165
 7.1. 개요 = 165
 7.2. 파이프 만들기와 사용하기 = 169
 7.3. 파이프로 프로세스 동기화하기 = 175
 7.4. 필터 연결에 파이프 사용하기 = 177
 7.5. 파이프를 사용해 셸 명령과 대화하기: popen() = 180
 7.6. 파이프와 stdio 버퍼링 = 185
 7.7. FIFO = 186
 7.8. FIFO를 사용하는 클라이언트/서버 응용 프로그램 = 189
 7.9. 비블로킹 I/O = 197
 7.10. 파이프와 FIFO에서 read()와 write() 함수의 의미 = 199
 7.11. 정리 = 201
 7.12. 연습문제 = 202
8장 시스템 V IPC 소개 = 205
 8.1. API 개요 = 206
 8.2. IPC 키 = 210
 8.3. 객체 권한과 데이터 구조체의 조합 = 212
 8.4. IPC 식별자와 클라이언트/서버 응용 프로그램 = 216
 8.5. 시스템 V IPC get 호출이 사용하는 알고리즘 = 218
 8.6. ipcs 와 ipcrm 명령 = 221 
 8.7. 모든 IPC 객체 목록 얻기 = 222
 8.8. IPC 설정 = 223
 8.9. 정리 = 224
 8.10. 연습문제 = 225
9장 시스템 V 메시지 큐 = 227
 9.1. 메시지 큐 생성하기와 열기 = 228
 9.2. 메시지 교환 = 231
  9.2.1 메시지 전송 = 231
  9.2.2 메시지 받기 = 234
 9.3. 메시지 큐 제어 오퍼레이션 = 238
 9.4. 메시지 큐와 연관된 데이터 구조체 = 240
 9.5. 메시지 큐 한도 = 242
 9.6. 시스템상의 모든 메시지 큐 출력하기 = 244
 9.7. 메시지 큐를 사용해 클라이언트/서버 프로그래밍하기 = 246
 9.8. 메시지 큐를 사용하는 파일 서버 응용 프로그램 = 249
 9.9. 시스템 V 메시지 큐의 불편한 점 = 256
 9.10. 정리 = 257
 9.11. 연습문제 = 258
10장 시스템 V 세마포어 = 261
 10.1. 개요 = 262
 10.2. 세마포어 집합 만들고 열기 = 265
 10.3. 세마포어 제어 오퍼레이션 = 266
 10.4. 세마포어와 관련된 데이터 구조 = 270
 10.5. 세마포어 초기화 = 273
 10.6. 세마포어 오퍼레이션 = 277
 10.7. 다중 블록된 세마포어 오퍼레이션 처리 = 286
 10.8. 세마포어 값 복구 = 287
 10.9. 이진 세마포어 프로토콜 구현 = 290
 10.10. 세마포어 한도 = 293
 10.11. 시스템 V 세마포어의 단점 = 295
 10.12. 정리 = 296 
 10.13. 연습문제 = 297
11장 시스템 V 공유 메모리 = 299
 11.1. 개요 = 300
 11.2. 공유 메모리 세그먼트 생성과 열기 = 300
 11.3. 공유 메모리 사용 = 302
 11.4. 예제: 공유 메모리를 통한 데이터 전송 = 304
 11.5. 가상 메모리상의 공유 메모리 위치 = 310
 11.6. 공유 메모리에 포인터 저장하기 = 314
 11.7. 공유 메모리 제어 오퍼레이션 = 315
 11.8. 공유 메모리와 관련된 데이터 구조체 = 318
 11.9. 공유 메모리 한도 = 319
 11.10. 정리 = 321
 11.11. 연습문제 = 321
12장 메모리 매핑 = 323
 12.1. 개요 = 323
 12.2. 매핑 생성: mmap() = 326
 12.3. 맵 영역 해제: munmap() = 330
 12.4. 파일 매핑 = 331
  12.4.1 비공개 파일 매핑 = 332
  12.4.2 공유 파일 매핑 = 333
  12.4.3 경계 문제 = 338
  12.4.4 메모리 보호 모드와 파일 접근 모드 상호 연동 = 339
 12.5. 매핑된 영역 동기화: msync() = 340
 12.6. mmap() 추가 플래그 = 342
 12.7. 익명 매핑 = 343
 12.8. 매핑된 영역 재매핑: mremap() = 347
 12.9. MAP_NORESERVE와 스왑 영역 낭비 = 348
 12.10. MAP_FIXED 플래그 = 351
 12.11. 비선형 매핑: remap_file_pages() = 352
 12.12. 정리 = 355
 12.13. 연습문제 = 356
13장 가상 메모리 오퍼레이션 = 357
 13.1. 메모리 보호 모드 변경: mprotect() = 358
 13.2. mlock()과 mlockall() 메모리 잠금 = 360 
 13.3. 메모리 상주 결정하기: mincore() = 365
 13.4. 미래의 메모리 사용 패턴: madvise() = 369
 13.5. 정리 = 371
 13.6. 연습문제 = 371
14장 POSIX IPC 소개 = 373
 14.1. API 개요 = 374
 14.2. 시스템 V IPC와 POSIX IPC의 비교 = 378
 14.3. 정리 = 379
15장 POSIX 메시지 큐 = 381
 15.1. 개요 = 382
 15.2. 메시지 큐 열기, 닫기, 링크 해제하기 = 382
 15.3. 디스크립터와 메시지 큐의 관계 = 386
 15.4. 메시지 큐 속성 = 387
 15.5. 메시지 교환 = 392
  15.5.1 메시지 송신 = 393
  15.5.2 메시지 수신 = 395
  15.5.3 타임아웃을 가진 메시지 송신과 수신 = 397
 15.6. 메시지 통지 = 398
  15.6.1 시그널을 통한 통지 수신 = 401
  15.6.2 스레드를 통한 통지 수신 = 403
 15.7. 리눅스 고유의 특징 = 405
 15.8. 메시지 큐 한도 = 408
 15.9. POSIX와 시스템 V 메시지 큐 비교 = 409
 15.10. 정리 = 410
 15.11. 연습문제 = 410
16장 POSIX 세마포어 = 413
 16.1. 개요 = 413
 16.2. 기명 세마포어 = 414
  16.2.1 기명 세마포어 열기 = 415
  16.2.2 세마포어 종료 = 418
  16.2.3 기명 세마포어 제거 = 418
 16.3. 세마포어 오퍼레이션 = 419
  16.3.1 세마포어 대기 = 420
  16.3.2 세마포어 게시 = 422
  16.3.3 세마포어의 현재 값 추출 = 423 
 16.4. 무기명 세마포어 = 425
  16.4.1 무기명 세마포어 초기화 = 426
  16.4.2 무기명 세마포어 종료 = 429
 16.5. 기타 동기화 기법과의 비교 = 430
 16.6. 세마포어 한도 = 432
 16.7. 정리 = 432
 16.8. 연습문제 = 433
17장 POSIX 공유 메모리 = 435
 17.1. 개요 = 436
 17.2. 공유 메모리 객체 생성 = 437
 17.3. 공유 메모리 객체 사용 = 441
 17.4. 공유 메모리 객체 제거 = 444
 17.5. 공유 메모리 API 비교 = 444
 17.6. 정리 = 446
 17.7. 연습문제 = 446
18장 파일 잠금 = 447
 18.1. 개요 = 447
 18.2. flock()을 이용한 파일 잠금 = 450
  18.2.1 잠금 상속과 해제의 의미 = 454
  18.2.2 flock()의 제약사항 = 455
 18.3. fcntl()을 이용한 레코드 잠금 = 456
  18.3.1 데드락 = 461
  18.3.2 예제: 대화형 잠금 프로그램 = 462
  18.3.3 예제: 잠금 함수 라이브러리 = 467
  18.3.4 잠금 한도와 성능 = 469
  18.3.5 잠금 상속과 해제의 의미 = 470
  18.3.6 잠금 기아와 큐의 잠금 요청 우선순위 = 472
 18.4. 의무 잠금 = 472
 18.5. /proc/locks 파일 = 476
 18.6. 프로그램의 하나의 인스턴스만 실행 = 479
 18.7. 오래된 잠금 기법 = 482
 18.8. 정리 = 484 
 18.9. 연습문제 = 485
19장 소켓: 소개 = 487
 19.1. 개요 = 488
 19.2. 소켓 생성: socket() = 492
 19.3. 소켓을 주소에 결속하기: bind() = 493
 19.4. 일반적인 소켓 주소 구조체: struct sockaddr = 494
 19.5. 스트림 소켓 = 494
  19.5.1 들어오는 연결을 기다림: listen() = 496
  19.5.2 연결 수락: accept() = 498
  19.5.3 상대방 소켓으로 연결: connect() = 499
  19.5.4 스트림 소켓의 I/O = 499
  19.5.5 연결 종료: close() = 500
 19.6. 데이터그램 소켓 = 500
  19.6.1 데이터그램 교환: recvfrom()과 sendto() = 502
  19.6.2 데이터그램 소켓에 connect() 사용하기 = 503
 19.7. 정리 = 504
20장 소켓: 유닉스 도메인 = 507
 20.1. 유닉스 도메인 소켓 주소: struct sockaddr_un = 507
 20.2. 유닉스 도메인의 스트림 소켓 = 510
 20.3. 유닉스 도메인의 데이터그램 소켓 = 514
 20.4. 유닉스 도메인 소켓 접근 권한 = 518
 20.5. 연결된 소켓 쌍 생성: socketpair() = 518
 20.6. 리눅스 추상 소켓 네임스페이스 = 519
 20.7. 정리 = 521
 20.8. 연습문제 = 521
21장 소켓: TCP/IP 네트워크 기초 = 523
 21.1. 인터넷 = 523
 21.2. 네트워킹 프로토콜과 계층 = 525
 21.3. 데이터 링크 계층 = 528
 21.4. 네트워크 계층: IP = 529
 21.5. IP 주소 = 532
 21.6. 전송 계층 = 534
  21.6.1 포트 번호 = 535
  21.6.2 UDP = 536 
  21.6.3 TCP = 537
 21.7. RFC = 541
 21.8. 정리 = 543
22장 소켓: 인터넷 도메인 = 545
 22.1. 인터넷 도메인 소켓 = 546
 22.2. 네트워크 바이트 순서 = 546
 22.3. 데이터 표현 = 548
 22.4. 인터넷 소켓 주소 = 551
 22.5. 호스트와 서비스 변환 함수 = 554
 22.6. 함수 inet_pton()과 inet_ntop() = 556
 22.7. 클라이언트/서버 예제(데이터그램 소켓) = 557
 22.8. DNS = 561
 22.9. /etc/services 파일 = 564
 22.10. 프로토콜 독립적인 호스트와 서비스 변환 = 565
  22.10.1 getaddrinfo() 함수 = 565
  22.10.2 addrinfo 리스트 해제: freeaddrinfo() = 569
  22.10.3 에러 진단: gai_strerror() = 570
  22.10.4 getnameinfo() 함수 = 571
 22.11. 클라이언트/서버 예제(스트림 소켓) = 572
 22.12. 인터넷 도메인 소켓 라이브러리 = 580
 22.13. 더 이상 사용하지 않는 호스트와 서비스 변경 API = 585
  22.13.1 inet_aton()과 inet_ntoa() 함수 = 586
  22.13.2 gethostbyname()과 gethostbyaddr() 함수 = 587
  22.13.3 getservbyname()과 getservbyport() 함수 = 590
 22.14. 유닉스 도메인 소켓과 인터넷 도메인 소켓 = 591
 22.15. 더 읽을거리 = 591
 22.16. 정리 = 592
 22.17. 연습문제 = 593
23장 소켓: 서버 설계 = 595
 23.1. 반복 서버와 병렬 서버 = 595
 23.2. 반복 UDP 에코 서버 = 596
 23.3. 병렬 TCP 에코 서버 = 599
 23.4. 그 밖의 병렬 서버 설계 = 602 
 23.5. inetd(인터넷 슈퍼서버) 데몬 = 605
 23.6. 정리 = 610
 23.7. 연습문제 = 611
24장 소켓: 고급 옵션 = 613
 24.1. 스트림 소켓에서 부분 읽기와 부분 쓰기 = 614
 24.2. shutdown() 시스템 호출 = 616
 24.3. 소켓 전용 I/O 시스템 호출: recv()와 send() = 620
 24.4. sendfile() 시스템 호출 = 622
 24.5. 소켓 주소 가져오기 = 626
 24.6. TCP에 대한 고찰 = 629
  24.6.1 TCP 세그먼트 포맷 = 629
  24.6.2 TCP 순서 번호와 답신 = 632
  24.6.3 TCP 상태 기계와 상태 전이 다이어그램 = 633 
  24.6.4 TCP 연결 수립 = 636
  24.6.5 TCP 연결 종료 = 637
  24.6.6 TCP 소켓에 shutdown() 호출하기 = 638
  24.6.7 TIME_WAIT 상태 = 639
 24.7. 소켓 모니터링: netstat = 641
 24.8. tcpdump를 이용한 TCP 트래픽 감시 = 643
 24.9. 소켓 옵션 = 645
 24.10. SO_REUSEADDR 소켓 옵션 = 646
 24.11. accept()를 통한 플래그와 옵션 상속 = 649
 24.12. TCP와 UDP = 649
 24.13. 고급 기능 = 651
  24.13.1 대역 외 데이터 = 651
  24.13.2 sendmsg()와 recvmsg() 시스템 호출 = 652
  24.13.3 파일 디스크립터 전달 = 653
  24.13.4 전송자의 자격 인증서 수신하기 = 653
  24.13.5 순차 패킷 소켓 = 654
  24.13.6 SCTP와 DCCP 전송 계층 프로토콜 = 655
 24.14. 정리 = 655
 24.15. 연습문제 = 657
25장 터미널 = 659
 25.1. 개요 = 660
 25.2. 터미널 속성값 읽기와 수정 = 662
 25.3. stty 명령 = 664 
 25.4. 터미널 특수문자 = 667
 25.5. 터미널 플래그 = 674
 25.6. 터미널 I/O 모드 = 682
  25.6.1 정규 모드 = 682
  25.6.2 비정규 모드 = 683
  25.6.3 cooked, cbreak, raw 모드 = 685
 25.7. 터미널 라인 속도(비트 전송률) = 693
 25.8. 터미널 라인 제어 = 695
 25.9. 터미널 윈도우 크기 = 696
 25.10. 터미널 식별 = 699
 25.11. 정리 = 700
 25.12. 연습문제 = 701
26장 대체 I/O 모델 = 703
 26.1. 개요 = 703
  26.1.1 레벨 트리거 통지와 에지 트리거 통지 = 708
  26.1.2 비블로킹 I/O에 대안 I/O 모델 적용하기 = 709
 26.2. I/O 멀티플렉싱 = 710
  26.2.1 select() 시스템 호출 = 710
  26.2.2 poll() 시스템 호출 = 718
  26.2.3 파일 디스크립터는 언제 준비 상태가 되는가?  = 723
  26.2.4 select()와 poll()의 비교 = 727
  26.2.5 select()와 poll()의 문제 = 730
 26.3. 시그널 기반 I/O = 731
  26.3.1 'I/O 가능' 시그널은 언제 발생하는가? = 736
  26.3.2 시그널 기반 I/O 고급 활용 = 737
 26.4. epoll API = 741
  26.4.1 epoll 인스턴스 생성: epoll_create() = 742
  26.4.2 epoll 관심 목록 변경: epoll_ctl() = 743
  26.4.3 이벤트 기다리기: epoll_wait() = 745
  26.4.4 epoll 동작에 대한 고찰 = 752
  26.4.5 epoll의 성능과 I/O 멀티플렉싱의 성능 = 753
  26.4.6 에지 트리거 통지 = 755
 26.5. 시그널과 파일 디스크립터 기다리기 = 757
  26.5.1 pselect() 시스템 호출 = 758 
  26.5.2 셀프 파이프 트릭 = 760
 26.6. 정리 = 763
 26.7. 연습문제 = 765 
27장 가상 터미널 = 767
 27.1. 개요 = 767
 27.2. 유닉스 98 가상 터미널 = 773
  27.2.1 사용하지 않는 마스터 열기: posix_openpt() = 773
  27.2.2 슬레이브의 소유권과 권한 변경: grantpt() = 775
  27.2.3 슬레이브 잠금 해제: unlockpt() = 776
  27.2.4 슬레이브 이름 얻기: ptsname() = 776
 27.3. 마스터 열기: ptyMasterOpen() = 777
 27.4. 프로세스를 가상 터미널과 연결: ptyFork() = 779
 27.5. 가상 터미널 I/O = 783
 27.6. script (1) 구현 = 785
 27.7. 터미널 속성과 윈도우 크기 = 790
 27.8. BSD 가상 터미널 = 791
 27.9. 정리 = 794
 27.10. 연습문제 = 795
부록 A 연습문제 해답 = 799
참고문헌 = 807
찾아보기 = 817

New Arrivals Books in Related Fields