▶ 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 연습문제 해답