목차정보
1장 역사와 표준 ___1.1유닉스와 C의 간략한 역사 ___1.2리눅스의 간략한 역사 ___1.3표준화 ___1.4정리 2장 기본 개념 ___2.1핵심 운영체제: 커널 ___2.2셸 ___2.3사용자와 그룹 ___2.4단일 디렉토리 계층구조, 디렉토리, 링크, 파일 ___2.5파일 I/O 모델 ___2.6프로그램 ___2.7프로세스 ___2.8메모리 매핑 ___2.9정적 라이브러리와 공유 라이브러리 ___2.10프로세스 간 통신과 동기화 ___2.11시그널 ___2.12스레드 ___2.13프로세스 그룹과 셸 작업 제어 ___2.14세션, 제어 터미널, 제어 프로세스 ___2.15가상 터미널 ___2.16날짜와 시간 ___2.17클라이언트/서버 아키텍처 ___2.18실시간 ___2.19/PROC 파일 시스템 ___2.20정리 3장 시스템 프로그래밍 개념 ___3.1시스템 호출 ___3.2라이브러리 함수 ___3.3표준 C 라이브러리: GNU C 라이브러리(GLIB) ___3.4시스템 호출과 라이브러리 함수의 에러 처리 ___3.5이 책의 예제 프로그램 ___3.6이식성 이슈 ___3.7정리 ___3.8연습문제 4장 파일 I/O: 범용 I/O 모델 ___4.1개요 ___4.2I/O의 범용성 ___4.3파일 열기: OPEN() ___4.4파일 읽기: READ() ___4.5파일에 쓰기: WRITE() ___4.6파일 닫기: CLOSE() ___4.7파일 오프셋 변경: LSEEK() ___4.8범용 I/O 모델 외의 오퍼레이션: IOCTL() ___4.9정리 ___4.10연습문제 5장 파일 I/O: 더 자세히 ___5.1원자성과 경쟁 상태 ___5.2파일 제어 오퍼레이션: FCNTL() ___5.3파일 상태 플래그 열기 ___5.4파일 디스크립터와 열려 있는 파일의 관계 ___5.5파일 디스크립터 복사하기 ___5.6지정된 오프셋에서의 파일 I/O: PREAD()와 PWRITE() ___5.7스캐터-개더 I/O: READV()와 WRITEV() ___5.8파일 잘라내기: TRUNCATE()와 FTRUNCATE() ___5.9비블로킹 I/O ___5.10큰 파일에 대한 I/O ___5.11/DEV/FD 디렉토리 ___5.12임시 파일 만들기 ___5.13정리 ___5.14연습문제 6장 프로세스 ___6.1프로세스와 프로그램 ___6.2프로세스 ID와 부모 프로세스 ID ___6.3프로세스의 메모리 레이아웃 ___6.4가상 메모리 관리 ___6.5스택과 스택 프레임 ___6.6명령행 인자(ARGC, ARGV) ___6.7환경 변수 목록 ___6.8비지역 GOTO 수행: SETJMP()와 LONGJMP() ___6.9정리 ___6.10연습문제 7장 메모리 할당 ___7.1힙에 메모리 할당하기 ___7.2스택에 메모리 할당하기: ALLOCA() ___7.3정리 ___7.4연습문제 8장 사용자와 그룹 ___8.1패스워드 파일: /ETC/PASSWD ___8.2섀도 패스워드 파일: /ETC/SHADOW ___8.3그룹 파일: /ETC/GROUP ___8.4사용자와 그룹 정보 읽기 ___8.5패스워드 암호화와 사용자 인증 ___8.6정리 ___8.7연습문제 9장 프로세스 자격증명 ___9.1실제 사용자 ID와 실제 그룹 ID ___9.2유효 사용자 ID와 유효 그룹 ID ___9.3SET-USER-ID와 SET-GROUP-ID 프로그램 ___9.4저장된 SET-USER-ID와 저장된 SET-GROUP-ID ___9.5파일 시스템 사용자 ID와 파일 시스템 그룹 ID ___9.6추가 그룹 ID ___9.7프로세스 자격증명 읽고 수정하기 ___9.8정리 ___9.9연습문제 10장 시간 ___10.1달력 시간 ___10.2시간 변환 함수 ___10.3시간대 ___10.4로케일 ___10.5시스템 클록 갱신하기 ___10.6소프트웨어 클록 ___10.7프로세스 시간 ___10.8정리 ___10.9연습문제 11장 시스템 한도와 옵션 ___11.1시스템 한도 ___11.2실행 시에 시스템 한도(그리고 옵션) 구하기 ___11.3실행 시에 파일 관련 한도(그리고 옵션) 읽기 ___11.4결정되지 않은 한도 ___11.5시스템 옵션 ___11.6정리 ___11.7연습문제 12장 시스템과 프로세스 정보 ___12.1/PROC 파일 시스템 ___12.2시스템 식별: UNAME() ___12.3정리 ___12.4연습문제 13장 파일 I/O 버퍼링 ___13.1파일 I/O의 커널 버퍼링: 버퍼 캐시 ___13.2STDIO 라이브러리 내의 버퍼링 ___13.3파일 I/O의 커널 버퍼링 제어 ___13.4I/O 버퍼링 요약 ___13.5I/O 패턴에 대한 커널 조언 ___13.6버퍼 캐시 우회: 직접 I/O ___13.7파일 I/O를 위한 라이브러리 함수와 시스템 호출의 혼합 ___13.8정리 ___13.9연습문제 14장 파일 시스템 ___14.1디바이스 특수 파일(디바이스) ___14.2디스크와 파티션 ___14.3파일 시스템 ___14.4I-노드 ___14.5가상 파일 시스템(VFS) ___14.6저널링 파일 시스템 ___14.7단일 디렉토리 계층과 마운트 지점 ___14.8파일 시스템의 마운트와 마운트 해제 ___14.9고급 마운트 기능 ___14.10가상 메모리 파일 시스템: TMPFS ___14.11파일 시스템 정보 획득: STATVFS() ___14.12정리 ___14.13연습문제 15장 파일 속성 ___15.1파일 정보 추출: STAT() ___15.2파일 타임스탬프 ___15.3파일 소유권 ___15.4파일 권한 ___15.5I-노드 플래그(EXT2 확장 파일 속성) ___15.6정리 ___15.7연습문제 16장 확장 속성 ___16.1개요 ___16.2확장 속성 구현 세부사항 ___16.3확장 속성 조작을 위한 시스템 호출 ___16.4정리 ___16.5연습문제 17장 ACL ___17.1개요 ___17.2ACL 권한 검사 알고리즘 ___17.3ACL의 길고 짧은 텍스트 형식 ___17.4ACL_MASK 엔트리와 ACL 그룹 클래스 ___17.5GETFACL과 SETFACL 명령 ___17.6기본 ACL과 파일 생성 ___17.7ACL 구현 제항사항 ___17.8ACL API ___17.9정리 ___17.10연습문제 18장 디렉토리와 링크 ___18.1디렉토리와 (하드) 링크 ___18.2심볼릭(소프트) 링크 ___18.3(하드) 링크 생성과 제거: LINK()와 UNLINK() ___18.4파일이름 변경: RENAME() ___18.5심볼릭 링크 관련 작업: SYMLINK()와 READLINK() ___18.6디렉토리 생성과 제거: MKDIR()과 RMDIR() ___18.7파일이나 디렉토리 제거: REMOVE() ___18.8디렉토리 읽기: OPENDIR()과 READDIR() ___18.9파일 트리 검색: NFTW() ___18.10프로세스의 현재 작업 디렉토리 ___18.11디렉토리 파일 식별자 관련 작업 운용 ___18.12프로세스의 루트 디렉토리 변경: CHROOT() ___18.13경로명 결정: REALPATH() ___18.14경로명 문자열 파싱: DIRNAME()과 BASENAME() ___18.15정리 ___18.16연습문제 19장 파일 이벤트 감시 ___19.1개요 ___19.2INOTIFY API ___19.3INOTIFY 이벤트 ___19.4INOTIFY 이벤트 읽기 ___19.5큐 한도와 /PROC 파일 ___19.6파일 이벤트 감시의 오래된 시스템: DNOTIFY ___19.7정리 ___19.8연습문제 20장 시그널: 기본 개념 ___20.1개념과 개요 ___20.2시그널 형식과 기본 동작 ___20.3시그널 속성 변경: SIGNAL() ___20.4시그널 핸들러 소개 ___20.5시그널 전송: KILL() ___20.6프로세스 존재 여부 검사 ___20.7시그널을 보내는 그 밖의 방법: RAISE()와 KILLPG() ___20.8시그널 설명 출력 ___20.9시그널 집합 ___20.10시그널 마스크(시그널 전달 블록) ___20.11보류 중인 시그널 ___20.12시그널은 큐에 들어가지 않는다 ___20.13시그널 속성 변경: SIGACTION() ___20.14시그널 대기: PAUSE() ___20.15정리 ___20.16연습문제 21장 시그널: 시그널 핸들러 ___21.1시그널 핸들러 설계 ___21.2시그널 핸들러를 종료하는 그 밖의 방법 ___21.3대체 스택의 시그널 처리: SIGALTSTACK() ___21.4SA_SIGINFO 플래그 ___21.5시스템 호출 인터럽트와 재시작 ___21.6정리 ___21.7연습문제 22장 시그널: 고급 기능 ___22.1코어 덤프 파일 ___22.2전달, 속성, 처리의 특별한 경우 ___22.3인터럽트 가능과 불가능 프로세스 수면 상태 ___22.4하드웨어 생성 시그널 ___22.5동기와 비동기 시그널 생성 ___22.6시그널 전달 시점과 순서 ___22.7SIGNAL()의 구현과 이식성 ___22.8실시간 시그널 ___22.9마스크를 이용한 시그널 대기: SIGSUSPEND() ___22.10동기적 시그널 대기 ___22.11파일 식별자를 통한 시그널 획득 ___22.12시그널을 통한 프로세스 간 통신 ___22.13구형 시그널 API(시스템 V와 BSD) ___22.14정리 ___22.15연습문제 23장 타이머와 수면 ___23.1시간 간격 타이머 ___23.2타이머 스케줄링과 정확성 ___23.3블로킹 오퍼레이션에 타임아웃 설정 ___23.4일정 시간 동안 실행 중지(수면) ___23.5POSIX 클록 ___23.6POSIX 시간 간격 타이머 ___23.7파일 식별자를 통해 통지하는 타이머: TIMERFD API ___23.8정리 ___23.9연습문제 24장 프로세스 생성 ___24.1FORK(), EXIT(), WAIT(), EXECVE() 소개 ___24.2새 프로세스의 생성: FORK() ___24.3VFORK() 시스템 호출 ___24.4FORK() 후의 경쟁 상태 ___24.5시그널 동기를 통한 경쟁 상태 회피 ___24.6정리 ___24.7연습문제 25장 프로세스 종료 ___25.1프로세스 종료하기: _EXIT()와 EXIT() ___25.2프로세스 종료 자세히 들여다보기 ___25.3종료 핸들러 ___25.4FORK(), STDIO 버퍼, _EXIT()의 상호작용 ___25.5정리 ___25.6연습문제 26장 자식 프로세스 감시 ___26.1자식 프로세스 기다리기 ___26.2고아와 좀비 프로세스 ___26.3SIGCHLD 시그널 ___26.4정리 ___26.5연습문제 27장 프로그램 실행 ___27.1새 프로그램 실행하기: EXECVE() ___27.2EXEC() 라이브러리 함수 ___27.3인터프리터 스크립트 ___27.4파일 디스크립터와 EXEC() ___27.5시그널과 EXEC() ___27.6셸 명령 실행하기: SYSTEM() ___27.7SYSTEM() 구현하기 ___27.8정리 ___27.9연습문제 28장 더 자세히 살펴보는 프로세스 생성과 프로그램 실행 ___28.1프로세스 어카운팅 ___28.2CLONE() 시스템 호출 ___28.3프로세스 생성 속도 ___28.4EXEC()와 FORK()가 프로세스 속성에 미치는 영향 ___28.5정리 ___28.6연습문제 29장 프로세스 그룹, 세션, 작업 제어 ___29.1개요 ___29.2프로세스 그룹 ___29.3세션 ___29.4터미널 제어와 프로세스 제어 ___29.5포그라운드와 백그라운드 프로세스 그룹 ___29.6SIGHUP 시그널 ___29.7작업 제어 ___29.8정리 ___29.9연습문제 30장 프로세스 우선순위와 스케줄링 ___30.1프로세스 우선순위(NICE 값) ___30.2실시간 프로세스 스케줄링 개요 ___30.3실시간 프로세스 스케줄링 API ___30.4CPU 친화도 ___30.5정리 ___30.6연습문제 31장 프로세스 자원 ___31.1프로세스 자원 사용 ___31.2프로세스 자원 한도 ___31.3구체적인 자원 한도 세부사항 ___31.4정리 ___31.5연습문제 32장 데몬 ___32.1개요 ___32.2데몬 생성 ___32.3데몬 작성의 지침서 ___32.4데몬을 다시 초기화하기 위해 SIGHUP 사용 ___32.5SYSLOG를 사용한 메시지와 에러 기록 ___32.6정리 ___32.7연습문제 33장 안전한 특권 프로그램 작성 ___33.1SET-USER-ID나 SET-GROUP-ID 프로그램이 필요한가? ___33.2최소 특권으로 운영하기 ___33.3프로그램 실행 시 주의사항 ___33.4중요한 정보의 노출 피하기 ___33.5프로세스 제한 ___33.6시그널과 경쟁 상태 인지 ___33.7파일 오퍼레이션과 파일 I/O 실행 시 위험성 ___33.8입력이나 환경을 믿지 말자 ___33.9버퍼 오버런 인지 ___33.10서비스 거부 공격 인지 ___33.11리턴 상태 검사와 안전하게 실패하기 ___33.12정리 ___33.13연습문제 34장 능력 ___34.1능력을 사용하는 이유 ___34.2리눅스 능력 기능 ___34.3프로세스와 파일 능력 기능 ___34.4현대적인 능력 기능 구현 ___34.5EXEC() 동안 프로세스 능력 기능 변경 ___34.6사용자 ID 변경 프로세스 능력의 효과 ___34.7프로그램적으로 프로세스 능력 변경 ___34.8능력 기능만의 환경 생성 ___34.9프로그램에 요구되는 능력 기능 찾기 ___34.10파일 능력 기능이 없는 이전의 커널과 시스템 ___34.11정리 ___34.12연습문제 35장 로그인 계정 ___35.1UTMP와 WTMP 파일의 개요 ___35.2UTMPX API ___35.3UTMPX 구조 ___35.4UTMP와 WTMP 파일에서 정보 추출 ___35.5로그인 이름 추출: GETLOGIN() ___35.6로그인 세션을 위한 UTMP와 WTMP 파일 갱신 ___35.7LASTLOG 파일 ___35.8정리 ___35.9연습문제 36장 공유 라이브러리 기초 ___36.1오브젝트 라이브러리 ___36.2정적 라이브러리 ___36.3공유 라이브러리 개요 ___36.4공유 라이브러리 생성과 사용(첫 번째 단계) ___36.5공유 라이브러리의 유용한 툴 ___36.6공유 라이브러리 버전과 이름 짓기 규칙 ___36.7공유 라이브러리 설치하기 ___36.8호환과 비호환 라이브러리 ___36.9공유 라이브러리 업그레이드하기 ___36.10오브젝트 파일에 라이브러리 검색 디렉토리 경로 지정하기 ___36.11실행 시에 공유 라이브러리 찾기 ___36.12실행 시 심볼 해석 ___36.13공유 라이브러리 대신 정적 라이브러리 사용하기 ___36.14정리 ___36.15연습문제 37장 공유 라이브러리의 고급 기능 ___37.1동적으로 라이브러리 적재하기 ___37.2심볼의 가시성 조절하기 ___37.3링커 버전 스크립트 ___37.4함수의 초기화와 마무리 ___37.5공유 라이브러리 미리 로딩하기 ___37.6동적 링커 감시하기: LD_DEBUG ___37.7정리 ___37.8연습문제 부록 A 시스템 호출 추적하기 B 명령행 옵션 파싱하기 C NULL 포인터 캐스팅하기 D 커널 설정 E 추가 정보 F 연습문제 해답 |