목차
0장 책을 읽기 전에 알아두어야 하는 것
   1. 헤더 파일 표기에 대해 ... 14
   2. 프로그램의 설계에 대해서 ... 21
   3. 책의 프로그래밍 및 서술 규칙에 대해서 ... 23
      임플리먼테이션(implementation)과 호환성 ... 23
      명명 규칙(Naming rule) ... 24
      함수 표기와 매뉴얼 페이지 ... 24
      형(type)과 형변환(type casting)에 관하여 ... 24
      에일리어싱(aliasing) ... 25
      restrict 포인터 ... 25
      매개 변수(parameter)와 인수(argument)의 차이 ... 26
   4. 당부의 말 ... 27
1장 프로세스
   1. fork ... 29
   2. exec(3) 계열 ... 34
      저수준 파일 핸들링 ... 36
      고수준 파일 핸들링 ... 36
2장 파일 처리
   1. 저수준 파일 핸들링의 사용 ... 38
      동기화 I/O(synchronized I/O)로 열기 ... 40
      파일 닫기 ... 41
   2. 고수준 파일 핸들링의 사용 ... 42
   3. 저수준과 고수준 파일 입출력의 혼용 ... 44
   4. 패딩(padding)/팩(pack)과 XDR ... 46
      RFC 1832, XDR: External Data Representation Standard ... 46
      구조체를 지원하지 않는 언어로 작성된 경우의 패딩 ... 51
   5. 저수준 및 고수준 파일 핸들링의 차이 ... 51
   6. 대용량 파일 지원(LFS) ... 53
      기존의 32Bit 파일 제한과 64Bit 파일 제한 함수를 분리하여 사용하는 법 ... 54
      32bit 함수들을 64Bit 파일 지원으로 모두 변환하는 법 ... 54
      OS별 LFS 지원 및 파일 시스템의 파일 크기 한계 : http: ... 55
3장 텍스트 처리
   1. 정규 표현식(RECEX)의 이용 ... 57
      텍스트(text) ... 65
      데이터(data) ... 65
      스택(stack) ... 65
      힙(heap) ... 65
      변수의 메모리 위치와 특성 ... 66
4장 Memory
   1. 메모리 정렬 및 검색 ... 70
      1.1 이진 검색(Binary Search) ... 71
   2. 메모리 락(memory lock) ... 76
      SysV IPC ... 80
      POSIX IPC ... 82
5장 IPC(Inter Process Communication)
   1. mmap(메모리맵) ... 83
   2. 공유 메모리(shared memory) ... 89
      2.1 SysV 공유 메모리 ... 90
      2.2 POSIX 공유 메모리 ... 100
   3. 세마포어(semaphore) ... 104
      3.1 SysV 세마포어 ... 106
        (1) SysV 세마포어의 생성 및 삭제 ... 108
        (2) SysV 세마포어의 사용 ... 116
      3.2 POSIX 세마포어 ... 125
   4. 메시지 큐의 사용 ... 133
      4.1 SysV 메시지 큐 ... 133
      4.2 POSIX 메시지 큐 ... 146
6장 I/O Interface
   1. 파이프(pipe)와 FIFO(First-In First-Out) ... 157
   2. 소켓(socket) ... 163
      소켓 도메인(socket domain) ... 164
      소켓 타입 ... 164
      소켓의 생성 ... 165
      2.1 바이트 순서(byte order) ... 168
      2.2 TCP 소켓의 기초(SOEK_STREAM 소켓) ... 171
socket(2) : 소켓의 생성 ... 173
bind(2) : 소켓의 부착 ... 173
        listen(2) : 서버측 연결 큐의 작성 ... 176
        connect(2) : 서버로 연결 ... 177
        accept(2) : 클라이언트의 연결 수용 ... 178
send(2), recv(2) : 데이터의 송수신 ... 179
        close(2), shutdown(2) : 연결 종료 ... 181
        간단한 TCP 소켓 예제 ... 182
        TCP 통신의 연결 설정과 흐름에 대한 자세한 이해 ... 188
        TIME_WAIT 상태에 대한 이해 ... 191
      2.3 UDP 소켓의 기초(SOCK_DGRAM 소켓) ... 193
      2.4 유닉스 도메인 소켓 ... 198
      2.5 TCP와 UDP 비교 ... 204
        용어 정의 ... 204
        소켓 버퍼 ... 205
        단편화와 재조합 ... 205
        TCP, UDP, IP 헤더 ... 206
        TCP, UDP 소켓과 IP 계층으로의 데이터 전송 시나리오 ... 210
        TCP 스트림 통신 ... 112
        UDP 오버플로우 ... 213
        TCP와 UDP의 비교 정리 ... 214
      2.6 TCP의 효율적인 통신을 위한 제이 기법들 ... 216
        네이글 알고리즘, 지연 ACK, 슬라이딩 윈도우 ... 216
        TCP autotuning ... 218
        RFC 1323 - TCP Extensions for High Performance ... 219
        RFC 2018 - TCP Selective Acknowledgment options ... 219
      2.7 UDP 브로드캐스팅 ... 220
      2.8 소켓 옵션 제어 ... 224
        SO_BROADCAST : UDP 소켓만 가능(1 : 켜짐, 0 : 꺼짐) ... 226
        SO_REUSEADDR : TCP, UDP 소켓 가능(1 : 켜짐, 0 : 꺼짐) ... 226
        SO_LINGER : TCP 소켓만 가능(struct linger 구조체 사용) ... 227
        SO_KEEPALIVE : TCP 소켓만 가능 (1 : 켜짐, 0 : 꺼짐) ... 228
        SO_OOBINLINE : TCP 소켓만 가능(1 : 켜짐, 0 : 꺼짐) ... 229
        SO_RCVBUF, SO_SNDBUF(int 형 지정, 바이트 크기 지정) ... 229
        SO_RCVTIMEO, SO_SNDTIMEO(int 형 지정, 타임아웃 지정) ... 230
        SO_RCVLOWAT, SO_SNDLOWAT(int 형 지정, 바이트 크기 지정) ... 231
        TCP_NODELAY : TCP 소켓만 가능(1 : 켜짐, 0 : 꺼짐) ... 232
        TCP_MAXSEG : TCP 소켓만 가능(int 형 지정, MSS 크기 지정) ... 233
      2.9 그 외의 소켓 관련 함수들 ... 233
        호스트 정보 : gethostbyname(3), gethostbyaddr(3) ... 234
        소켓 정보 : getsockopt(2), setsockopt(2), getsockname(2), getpeername(2) ... 235
        서비스 정보 : getservent(3), getservbyname(3), getservbyport(3) ... 236
        프로토콜 정보 : getprotoent(3), getprotobyname(3), getprotobynumber(3) ... 237
        주소 변환 : inet_addr(3), inet_aton(3), inet_ntoa(3), inet_pton(3), inet_ntop(3) ... 238
        바이트 정렬 : htons(2), htonl(3), ntohs(3), ntohl(3) ... 240
      2.10 넌블록킹 모드의 사용 ... 240
        넌블록킹으로 파일 기술자 열기/바꾸기 ... 241
        넌블록킹 모드에서 TCP 소켓에 연결하기 ... 241
        넌블록킹으로 읽기/쓰기 ... 244
        블록킹과 넌블록킹 모드에서의 읽기의 문제 ... 245
        블록킹과 넌블록킹 모드에서의 쓰기의 문제 ... 247
      2.11 TCP 소켓의 아웃 오브 밴드(Out-Of-Band) 데이터 처리 ... 249
   3. I/O 인터페이스의 선택 기준에 대해 ... 261
      그러나 벤치마킹을 참고하여 ... 261
      C10K 문제 ... 264
select/poll은 왜 epoll/kqueue 보다 느릴까? ... 265
7장 I/O 멀티플렉싱(Multiplexing)
   1. select, pselect의 사용 ... 266
   2. 넌블록킹 accept(2) ... 276
   3. poll(2)의 사용 ... 280
   4. poller를 이용한 TCP의 OOB 데이터 감지 ... 283
   5. epoll(event poll) ... 291
      5.1 epoll API ... 294
      5.2 epoll 구현 예제 ... 298
8장 쓰레드 프로그래밍
   1. 프로세스의 모듈화 ... 305
      프로세스 내부의 비동기적 처리 : 쓰레드의 도입 ... 308
      재진입성(reentrant) ... 310
      쓰레드 안전(thread safety) ... 311
      I/O 입출력의 원자성 ... 311
pthread API에서의 함수 반환값의 의미 ... 312
      쓰레드 도입시 주의 사항 ... 313
   2. pthread API : 쓰레드의 생성, 종료 ... 313
   3. 뮤텍스(MUTEX) ... 318
      3.1 뮤텍스 초기화 ... 319
        뮤텍스 변수의 동적 초기화 ... 320
        뮤텍스 변수의 정적 초기화 ... 323
      3.2 뮤텍스의 사용 ... 324
   4. 조건 변수(condition variable) ... 333
   5. 조건 변수와 뮤텍스의 적용 ... 338
   6. 뮤텍스/조건 변수의 공유 ... 348
   7. 배리어(barrier) ... 353
   8. 여러 가지 락(locks)의 사용 : sleep locks, spin locks, reader-writer locks ... 359
      잠금 메커니즘(lock mechanism)의 특성 ... 359
      슬립 락(sleep locks) ... 359
      스핀 락(spin locks) ... 360
      판독자-기록자 락(reader-writer locks) ... 360
   9. 쓰레드의 응용 ... 369
   10. 기타 쓰레드 함수 ... 373
      쓰레드 지정 데이터 저장 ... 373
      쓰레드 속성 지정 ... 377
9장 시그널 처리
   1. UNIX 표준 시그널들 ... 378
   2. 시그널 전달과 시그널 처리기(Signal handler) ... 385
   3. SIGCHLD 시그널과 자식 프로세스 ... 394
   4. 세션과 프로세스 그룹 ... 399
   5. 시그널 마스크와 지연된 시그널 처리 ... 403
   6. 시그널과 원자적 실행 ... 407
   7. 쓰레드 환경에서의 시그널 처리 ... 408
      1003.1b ... 412
      리얼타임 시그널(Realtime Signal : 이하 RTS) ... 413
10장 POSIX 리얼타임 확장
   1. 리얼타임 이벤트 : sigevent ... 414
      SIGEV_SIGNAL 통지 모드 ... 415
      SIGEV_THREAD 통지 모드 ... 415
   2. 리얼타임 시그널(RTS) ... 416
   3. RTS를 이용한 I/O multiplexing ... 423
   4. 리얼타임 시계(realtime clock) ... 430
   5. 비동기적 I/O(AIO) ... 441
      비동기적(asynchronous)과 넌블록킹(non-blocking)의 차이 ... 441
      주의) 동기화(synchronization)란? ... 442
      5.1 비동기 입출력 사용 ... 444
      5.2 리스트 비동기 입출력 ... 447
Appendix UNIX와 표준안, 그리고 Linux
   1. Multics ... 452
   2. 유닉스의 두 마리 용 : AT&T와 BSD ... 454
   3. POSIX의 등장 ... 455
   4. X/OPEN과 SUS의 등장 ... 458
   5. Epoll과 쓰레드의 응용 ... 461
      5.1 구조적 설계 ... 461
      5.2 소스 코드 예제 ... 467
닫기