이미 소장하고 있다면 판매해 보세요.
|
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.2 I/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.3 set-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.2 stdio 라이브러리 내의 버퍼링 ___13.3 파일 I/O의 커널 버퍼링 제어 ___13.4 I/O 버퍼링 요약 ___13.5 I/O 패턴에 대한 커널 조언 ___13.6 버퍼 캐시 우회: 직접 I/O ___13.7 파일 I/O를 위한 라이브러리 함수와 시스템 호출의 혼합 ___13.8 정리 ___13.9 연습문제 14장 파일 시스템 ___14.1 디바이스 특수 파일(디바이스) ___14.2 디스크와 파티션 ___14.3 파일 시스템 ___14.4 i-노드 ___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.5 i-노드 플래그(ext2 확장 파일 속성) ___15.6 정리 ___15.7 연습문제 16장 확장 속성 ___16.1 개요 ___16.2 확장 속성 구현 세부사항 ___16.3 확장 속성 조작을 위한 시스템 호출 ___16.4 정리 ___16.5 연습문제 17장 ACL ___17.1 개요 ___17.2 ACL 권한 검사 알고리즘 ___17.3 ACL의 길고 짧은 텍스트 형식 ___17.4 ACL_MASK 엔트리와 ACL 그룹 클래스 ___17.5 getfacl과 setfacl 명령 ___17.6 기본 ACL과 파일 생성 ___17.7 ACL 구현 제항사항 ___17.8 ACL 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.2 inotify API ___19.3 inotify 이벤트 ___19.4 inotify 이벤트 읽기 ___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.4 SA_SIGINFO 플래그 ___21.5 시스템 호출 인터럽트와 재시작 ___21.6 정리 ___21.7 연습문제 22장 시그널: 고급 기능 ___22.1 코어 덤프 파일 ___22.2 전달, 속성, 처리의 특별한 경우 ___22.3 인터럽트 가능과 불가능 프로세스 수면 상태 ___22.4 하드웨어 생성 시그널 ___22.5 동기와 비동기 시그널 생성 ___22.6 시그널 전달 시점과 순서 ___22.7 signal()의 구현과 이식성 ___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.5 POSIX 클록 ___23.6 POSIX 시간 간격 타이머 ___23.7 파일 식별자를 통해 통지하는 타이머: timerfd API ___23.8 정리 ___23.9 연습문제 24장 프로세스 생성 ___24.1 fork(), exit(), wait(), execve() 소개 ___24.2 새 프로세스의 생성: fork() ___24.3 vfork() 시스템 호출 ___24.4 fork() 후의 경쟁 상태 ___24.5 시그널 동기를 통한 경쟁 상태 회피 ___24.6 정리 ___24.7 연습문제 25장 프로세스 종료 ___25.1 프로세스 종료하기: _exit()와 exit() ___25.2 프로세스 종료 자세히 들여다보기 ___25.3 종료 핸들러 ___25.4 fork(), stdio 버퍼, _exit()의 상호작용 ___25.5 정리 ___25.6 연습문제 26장 자식 프로세스 감시 ___26.1 자식 프로세스 기다리기 ___26.2 고아와 좀비 프로세스 ___26.3 SIGCHLD 시그널 ___26.4 정리 ___26.5 연습문제 27장 프로그램 실행 ___27.1 새 프로그램 실행하기: execve() ___27.2 exec() 라이브러리 함수 ___27.3 인터프리터 스크립트 ___27.4 파일 디스크립터와 exec() ___27.5 시그널과 exec() ___27.6 셸 명령 실행하기: system() ___27.7 system() 구현하기 ___27.8 정리 ___27.9 연습문제 28장 더 자세히 살펴보는 프로세스 생성과 프로그램 실행 ___28.1 프로세스 어카운팅 ___28.2 clone() 시스템 호출 ___28.3 프로세스 생성 속도 ___28.4 exec()와 fork()가 프로세스 속성에 미치는 영향 ___28.5 정리 ___28.6 연습문제 29장 프로세스 그룹, 세션, 작업 제어 ___29.1 개요 ___29.2 프로세스 그룹 ___29.3 세션 ___29.4 터미널 제어와 프로세스 제어 ___29.5 포그라운드와 백그라운드 프로세스 그룹 ___29.6 SIGHUP 시그널 ___29.7 작업 제어 ___29.8 정리 ___29.9 연습문제 30장 프로세스 우선순위와 스케줄링 ___30.1 프로세스 우선순위(nice 값) ___30.2 실시간 프로세스 스케줄링 개요 ___30.3 실시간 프로세스 스케줄링 API ___30.4 CPU 친화도 ___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.5 syslog를 사용한 메시지와 에러 기록 ___32.6 정리 ___32.7 연습문제 33장 안전한 특권 프로그램 작성 ___33.1 set-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.5 exec() 동안 프로세스 능력 기능 변경 ___34.6 사용자 ID 변경 프로세스 능력의 효과 ___34.7 프로그램적으로 프로세스 능력 변경 ___34.8 능력 기능만의 환경 생성 ___34.9 프로그램에 요구되는 능력 기능 찾기 ___34.10 파일 능력 기능이 없는 이전의 커널과 시스템 ___34.11 정리 ___34.12 연습문제 35장 로그인 계정 ___35.1 utmp와 wtmp 파일의 개요 ___35.2 utmpx API ___35.3 utmpx 구조 ___35.4 utmp와 wtmp 파일에서 정보 추출 ___35.5 로그인 이름 추출: getlogin() ___35.6 로그인 세션을 위한 utmp와 wtmp 파일 갱신 ___35.7 lastlog 파일 ___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 연습문제 해답 |
|
리눅스와 유닉스 시스템 프로그래밍 인터페이스를 빠짐없이 다룬 최고의 안내서!
『리눅스 API의 모든 것』은 리눅스와 유닉스 프로그래밍 인터페이스(리눅스나 유닉스 시스템에서 동작하는 거의 모든 응용 프로그램이 사용하는 인터페이스)을 위한 최고의 안내서다. 리눅스 프로그래밍 전문가 마이클 커리스크는 이 권위 있는 책에서, 시스템 프로그래밍 기술을 마스터하는 데 필요한 시스템 호출과 라이브러리 함수를 자세히 설명하며, 이에 덧붙여 명확하고 완전한 예제 프로그램을 제공한다. 이 책에서는 1권과 2권 통틀어 500개가 넘는 시스템 호출과 라이브러리 함수, 200개가 넘는 예제 프로그램, 88개의 표, 115개의 다이어그램에 대한 설명이 들어 있으며, 1권에서는 다음과 같은 내용을 설명한다. ■ 파일을 효율적으로 읽고 쓰기 ■ 시그널, 클록, 타이머 사용법 ■ 프로세스를 만들고 프로그램 실행하기 ■ 안전한 프로그램 작성법 ■ 공유 라이브러리 만들고 사용하기 『리눅스 API의 모든 것』이 epoll, inotify, /proc 파일 시스템 등 수많은 리눅스 고유 기능을 다루지만, 유닉스 표준(POSIX.1-2001/SUSv3와 POSIX.1-2008/SUSv4)을 강조하기 때문에 여타 유닉스 플랫폼에서 작업하는 프로그래머들에게도 마찬가지로 가치가 크다. 『리눅스 API의 모든 것』은 리눅스와 유닉스 프로그래밍 인터페이스를 다룬 가장 포괄적인 책이며, 새로운 고전이 되리라 믿어 의심치 않는다. |