책소개
C의 가능성을 믿는 이들에게 선사하는
가장 진보된 기능으로 떠나는 여행
오랜 역사를 자랑하는 C는 여전히 프로그래밍에서 가장 중요한 언어다. 특히 C는 임베디드 시스템과 고성능 하드웨어를 개발할 때 진면모를 발휘하며, 소프트웨어 엔지니어링, 항공우주 연구의 핵심 언어로 자리 잡았다. 무궁무진한 C의 가능성을 믿고, C의 심화 개념과 활용법을 알아보고 싶다면 이 책을 펼칠 차례다.
실제 애플리케이션 개발과 유지 보수에 필요한 기초와 고급 지식을 모두 담았다. C와 유닉스의 역사부터 객체지향, 커널, 스레드, 프로세스, 다른 언어와의 통합에 이르기까지 폭넓은 주제를 살펴본다. 이 책을 통해 여러분의 스킬을 한 단계 높여 배운 내용을 실질적으로 활용할 수 있는 C 전문가로 거듭나길 바란다.
저자소개
임베디드 및 커널 전문 개발자. 이란의 여러 유명 회사에서 시니어 엔지니어, 아키텍트, 컨설턴트, CTO로 근무했다. 2017년에는 유럽으로 건너가 제퍼슨(Jeppesen), 아데코(Adecco), 톰톰 (TomTom), 액티브비디오 네트웍스(ActiveVideo Networks)와 같은 명망 높은 회사에서 시니어 아키텍트 겸 엔지니어로 근무했다. 암스테르담에 머무르는 동안 『전문가를 위한 C』 책을 집필했으며 주된 관심 분야는 컴퓨터 이론, 분산 시스템, 머신러닝, 정보 이론, 양자 컴퓨터이다. 직업적 커리어를 쌓으면서 천문학과 행성학도 공부한다. 우주의 초기 발생, 블랙홀의 기하학, 양자장론, 끈 이론 분야에 학술적 관심을 두고 있다.
목차
[PART I C 프로젝트 빌드]
CHAPTER 1 필수 요소
1.1 전처리기 지시자
1.2 포인터 변수
1.3 함수
1.4 함수 포인터
1.5 구조체
1.6 마무리
CHAPTER 2 소스 코드에서 이진 파일로
2.1 표준 컴파일 파이프라인
2.2 전처리기
2.3 컴파일러
2.4 어셈블러
2.5 링커
2.6 마무리
CHAPTER 3 목적 파일
3.1 ABI
3.2 목적 파일 형식
3.3 재배치 가능한 목적 파일
3.4 실행 가능한 목적 파일
3.5 정적 라이브러리
3.6 동적 라이브러리
3.7 마무리
[PART II 메모리]
CHAPTER 4 프로세스 메모리 구조
4.1 프로세스 메모리 레이아웃
4.2 메모리 구조 알아보기
4.3 정적 메모리 레이아웃 검사하기
4.4 동적 메모리 레이아웃 검사하기
4.5 마무리
CHAPTER 5 스택과 힙
5.1 스택
5.2 힙
5.3 제한된 환경에서의 메모리 관리
5.4 마무리
[PART III 객체지향]
CHAPTER 6 OOP와 캡슐화
6.1 객체지향적 사고
6.2 C가 객체지향이 아닌 이유
6.3 캡슐화
6.4 마무리
CHAPTER 7 합성과 집합
7.1 클래스 간의 관계
7.2 객체 대 클래스
7.3 합성
7.4 집합
7.5 마무리
CHAPTER 8 상속과 다형성
8.1 상속
8.2 다형성
8.3 마무리
CHAPTER 9 추상화와 C++의 OOP
9.1 추상화
9.2 C++의 객체지향 구성물
9.3 마무리
[PART IV 유닉스]
CHAPTER 10 유닉스의 역사와 아키텍처
10.1 유닉스의 역사
10.2 유닉스 아키텍처
10.3 사용자 응용프로그램에 대한 셸 인터페이스
10.4 셸 링에 대한 커널 인터페이스
10.5 커널
10.6 하드웨어
10.7 마무리
CHAPTER 11 시스템 호출과 커널
11.1 시스템 호출
11.2 유닉스 커널
11.3 마무리
CHAPTER 12 최신 C
12.1 C11
12.2 C 표준 지원 버전 찾기
12.3 gets 함수의 제거
12.4 fopen 함수로의 변화
12.5 경계 검사 함수
12.6 값을 반환하지 않는 함수
12.7 타입 제네릭 매크로
12.8 유니코드
12.9 익명 구조체와 익명 공용체
12.10 멀티스레딩
12.11 마무리
[PART V 동시성]
CHAPTER 13 동시성
13.1 동시성 소개
13.2 병렬성
13.3 동시성
13.4 작업 스케줄러 유닛
13.5 프로세스와 스레드
13.6 발생 전 제약
13.7 동시성을 사용해야 하는 경우
13.8 공유 상태
13.9 마무리
CHAPTER 14 동기화
14.1 동시성 문제
14.2 고유한 동시성 문제
14.3 동기화 이후 문제
14.4 동기화 기술
14.5 스핀락
14.6 POSIX의 동시성
14.7 멀티프로세싱
14.8 멀티스레딩
14.9 마무리
CHAPTER 15 스레드 실행
15.1 스레드
15.2 POSIX 스레드
15.3 POSIX 스레드 스폰하기
15.4 경쟁 상태에 대한 예제
15.5 데이터 경쟁에 대한 예
15.6 마무리
CHAPTER 16 스레드 동기화
16.1 POSIX 동시성 제어
16.2 POSIX 스레드와 메모리
16.3 마무리
[PART VI 프로세스 간 통신]
CHAPTER 17 프로세스 실행
17.1 프로세스 실행 API
17.2 프로세스 실행 단계
17.3 공유 상태
17.4 멀티스레딩 대 멀티프로세싱
17.5 마무리
CHAPTER 18 프로세스 동기화
18.1 싱글 호스트 동시성 제어
18.2 기명 POSIX 세마포어
18.3 기명 뮤텍스
18.4 기명 조건 변수
18.5 분산된 동시성 제어
18.6 마무리
CHAPTER 19 싱글 호스트 IPC와 소켓
19.1 IPC 기법
19.2 통신 프로토콜
19.3 싱글 호스트 통신
19.4 소켓 프로그래밍
19.5 마무리
CHAPTER 20 소켓 프로그래밍
20.1 소켓 프로그래밍 복습
20.2 계산기 프로젝트
20.3 유닉스 도메인 소켓
20.4 네트워크 소켓
20.5 마무리
CHAPTER 21 다른 언어와의 통합
21.1 통합이 가능한 이유
21.2 필수 자료 획득하기
21.3 스택 라이브러리
21.4 C++과 통합하기
21.5 자바와 통합하기
21.6 파이썬과 통합하기
21.7 고와 통합하기
21.8 마무리
[PART VII 테스트와 유지 보수]
CHAPTER 22 유닛 테스트와 디버깅
22.1 소프트웨어 테스트
22.2 유닛 테스트
22.3 컴포넌트 테스트
22.4 C의 테스트 라이브러리
22.5 디버깅
22.6 마무리
CHAPTER 23 빌드 시스템
23.1 빌드 시스템 소개
23.2 메이크
23.3 CMake: 빌드 시스템이 아닙니다
23.4 닌자
23.5 바젤
23.6 빌드 시스템 비교하기
23.7 마무리