리눅스 API의 모든 것 기초 리눅스 API Vol. 1
도서명:리눅스 API의 모든 것 기초 리눅스 API Vol. 1
저자/출판사:마이클,커리스크/에이콘출판
쪽수:1112쪽
출판일:2012-07-12
ISBN:9788960773196
목차
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 연습문제 해답