본문

목차정보

[목차정보]
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 연습문제 해답