옮긴이의 말
지은이의 말
PART 1 기초편 - 실천적 C 프로그래밍 학습
CHAPTER 1 왜 지금 C를 배워야 하는가?
1.1 알고리즘과 구현
1.1.1 컴퓨터 프로그램의 동작원리
1.1.2 프로그래밍 언어의 트렌드
1.1.3 시스템 프로그래밍이란
1.2 C 학습의 장점
1.2.1 C 활용의 장점
1.2.2 C의 단점
1.3 이 책을 효과적으로 활용하려면
1.3.1 이 책을 읽기 위한 전제조건
1.3.2 이 책의 구성
CHAPTER 2 우분투가 제공하는 학습 환경
2.1 우분투 리눅스 설치
2.1.1 우분투란
2.1.2 우분투를 사용해보자
2.1.3 패키지 관리 시스템
2.2 C 언어 개발 환경 정비
2.2.1 C 언어 컴파일러와 각종 도구
2.2.2 에디터와 실행 환경
2.2.3 개발 환경과 개발 스타일
CHAPTER 3 대규모 개발 프로젝트와 라이브러리 이용
3.1 프로그램 소스의 분할
3.1.1 C 프로그램의 빌드 과정
3.1.2 프로그램 소스를 분할하는 이유
3.2 make의 이용
3.2.1 빌드 자동화
3.2.2 다양한 make의 기능
3.3 라이브러리 활용과 헤더 파일의 의의
3.3.1 라이브러리
3.3.2 헤더 파일의 역할
3.3.3 사전으로서의 헤더 파일
CHAPTER 4 프로그램의 이식성
4.1 프로그램 이식성 확보
4.1.1 플랫폼과 환경설정에 의한 차이
4.1.2 차이를 극복하는 방법
4.2 Autotoolset
4.2.1 소스 코드 입수와 설치
4.2.2 configure 스크립트
4.2.3 Autotoolset을 이용한 이식성 높은 소프트웨어
4.3 새로운 도구 CMake
4.3.1 CMake의 활용
4.3.2 CMake로 프로그램 빌드
CHAPTER 5 라이브러리의 특징과 활용 시 주의점
5.1 외부 코드 이용의 실제
5.1.1 라이브러리와의 결합
5.1.2 정적 링크와 동적 링크
5.1.3 동적 로드
5.2 라이브러리를 좀 더 알아보자
5.2.1 라이브러리의 더 많은 활용
5.2.2 라이브러리 이용 시의 함정
5.3 스코프와 이름 공간
5.3.1 변수와 심볼의 유효범위
5.3.2 파일 단위 관리
PART 2 활용편 - 다양한 라이브러리를 이용한 프로그래밍
CHAPTER 6 옵션 해석
6.1 명령줄 옵션
6.1.1 프로그램에 전달하는 파라미터
6.1.2 명령 인수 해석
6.2 getopt와 getopot_long
6.2.1 명령줄 옵션이란
6.2.2 짧은 옵션 해석
6.2.3 긴 옵션 해석
6.2.4 더욱 진화한 옵션 해석
CHAPTER 7 데이터 다루기
7.1 프로그램의 기본 구성
7.1.1 알고리즘과 데이터 구조
7.1.2 다양한 데이터 구조
7.2 GLib을 이용한 기본적인 데이터 구조
7.2.1 양끝에서 접근 가능한 큐
7.2.2 연결 리스트
7.2.3 배열
7.3 XML 데이터 읽기 쓰기
7.3.1 XML로 나타내는 데이터 구조
7.3.2 libxml2 활용
CHAPTER 8 데이터베이스 애플리케이션
8.1 데이터베이스의 개요
8.1.1 데이터베이스와 DBMS
8.1.2 관계형 데이터베이스
8.1.3 데이터베이스 접근 예제
8.2 SQLite 활용
8.2.1 간편한 데이터베이스
8.2.2 개발 패키지 설치와 예제 데이터 준비
8.2.3 libsqlite3으로 데이터 읽기 쓰기
CHAPTER 9 네트워크
9.1 네트워크 프로그래밍의 기초
9.1.1 서버와 클라이언트
9.1.2 간단한 서버 프로그램
9.1.3 실제 서버 프로그램
9.2 네트워크 해석
9.2.1 해석 도구
9.2.2 패킷에 액세스하는 프로그래밍
CHAPTER 10 과학기술계산
10.1 과학기술계산의 역사와 응용
10.1.1 컴퓨터의 등장과 물리연산
10.1.2 다양한 문제들
10.2 BLAS와 LAPACK
10.2.1 방정식과 행렬계산
10.2.2 BLAS의 도입과 예제 프로그램
10.2.3 LAPACK 설치와 예제 프로그램
10.3 GSL
10.3.1 GSL이란
10.3.2 GSL의 이용
CHAPTER 11 이미지 데이터 처리
11.1 이미지 처리 개론
11.1.1 이미지 데이터 다루기
11.1.2 각종 이미지 파일 형식
11.1.3 프로그램에서 이미지 데이터 이용
11.2 각종 라이브러리 이용
11.2.1 libnetpbm
11.2.2 ImageMagick
11.2.3 gdk_pixbuf
11.3 아스키 아트
11.3.1 아스키 아트의 종류
11.3.2 아스키 아트 생성 라이브러리
CHAPTER 12 GUI 프로그래밍
12.1 GUI와 위젯
12.1.1 위젯이란
12.1.2 다양한 위젯 라이브러리
12.1.3 GUI 프로그래밍의 기초
12.2 GTK+ 첫걸음
12.2.1 대화상자 표시
12.2.2 GTK+로 만드는 Hello, world!
12.2.3 마우스 조작
12.2.4 키보드 입력 처리
12.3 GUI 빌더
12.3.1 다양한 GUI 빌더
12.3.2 libglade의 이용
CHAPTER 13 컴퓨터 그래픽
13.1 2D 그래픽
13.1.1 그리기 라이브러리
13.1.2 Cairo 입문
13.1.3 아주 간단한 예제 프로그램
13.1.4 대화형 그래픽 처리
13.2 3D 그래픽
13.2.1 OpenGL의 기초
13.2.2 간단한 3D 애니메이션
13.2.3 GLUT와 GTK+
CHAPTER 14 장치 액세스
14.1 이미지 캡처
14.1.1 카메라 기기에서 이미지 가져오기
14.1.2 리눅스에서 이용할 수 있는 카메라와 비디오 캡처 기기
14.1.3 이미지 캡처 라이브러리
14.1.4 카메라에서 이미지를 캡처하는 프로그램
14.2 USB 장치
14.2.1 USB 장치 제어
14.2.2 HID 조작
14.3 다양한 장치 액세스
14.3.1 지문인식 장치
14.3.2 아이폰, 아이팟 터치 액세스
14.3.3 아이팟 액세스
CHAPTER 15 인코딩, 디코딩, 문자열 해석
15.1 바코드
15.1.1 바코드 출력
15.1.2 2차원 코드
15.1.3 QR 코드
15.2 문자열 해석
15.2.1 URI
15.2.2 MIME
15.2.3 설정 파일
CHAPTER 16 테스트 방법
16.1 유닛 테스트
16.1.1 테스트의 중요성
16.1.2 CUnit의 이용
16.2 메모리 관련 테스트
16.2.1 C 프로그램의 메모리 관리 문제
16.2.2 메모리 누수 검출
PART 3 실천편 - 프로그램 개발 사례
CHAPTER 17 프로그래밍 사례: 도입에서 기본 조작까지
17.1 볼록 껍질 문제
17.1.1 볼록 집합과 볼록 껍질
17.1.2 최소 블록 계산의 의의
17.2 다시 하는 GTK+ 프로그래밍
17.2.1 [스텝 1] 대화상자 표시
17.2.2 [스텝 2] 대화상자 표시 수정
17.3 프로그램 분할
17.3.1 [스텝 3] 분할 컴파일 대응
17.3.2 CMake 활용
17.4 대화식 작동
17.4.1 [스텝 4] 콜백 함수에 의한 그리기 처리 준비
17.4.2 [스텝 5] 노드 추가
17.4.3 [스텝 6] 마우스 커서 조작
17.4.4 [스텝 7] 노드 조작
CHAPTER 18 프로그래밍 사례: 조작방법 확장
18.1 단일 노드에서 복수 노드로
18.1.1 [스텝 8] 노드 집합(노드 리스트) 도입
18.1.2 노드 집합을 관리하는 코드 구현
18.2 다각형 생성
18.2.1 [스텝 9] 다각형 데이터 도입
18.2.2 [스텝 10] 올바른 다각형 생성
18.2.3 정렬 코드
18.3 GUI 확대와 알고리즘 구현 준비
18.3.1 [스텝 11] 알고리즘 작성용 데이터 도입
18.3.2 필드 수정
18.3.3 그 밖의 수정
CHAPTER 19 프로그래밍 사례: 알고리즘의 구현
19.1 최소 볼록 계산 알고리즘 구현
19.1.1 포장법
19.1.2 축차구성법
19.1.3 축차구성법의 구체적인 계산처리
19.2 포장법에 의한 볼록 껍질 계산 구현
19.2.1 [스텝 12] 볼록 껍질 클래스의 도입
19.2.2 그 밖의 파일 수정
19.2.3 많은 노드를 계산하는 예
19.3 축차구성법에 의한 볼록 껍질 계산의 구현
19.3.1 [스텝 13] 프로그램 수정
끝맺으면서
찾아보기
칼럼 모아보기
칼럼 1 : Super Cow Powers
칼럼 2 : 기계어를 읽다
칼럼 3 : 디렉터리 구조의 가시화
칼럼 4 : make의 다양한 활용법
칼럼 5 : G_BEGIN_DECLS란?
칼럼 6 : 시스템에서 정의되는 매크로
칼럼 7 : Makefile 이외의 프로젝트 파일
칼럼 8 : 들여 쓰기와 스코프
칼럼 9 : main() 함수의 세 번째 인수
칼럼 10 : fall-through
칼럼 11 : 프로세스의 종료 상태
칼럼 12 : NULL과 0
칼럼 13 : foo, bar, baz?
칼럼 14 : pkg-config
칼럼 15 : GLib이 제공하는 형
칼럼 16 : 복잡한 캐스트와 포인터형 선언의 표현방법
칼럼 17 : GLib의 그 밖의 기능
칼럼 18 : SQLite Database Browser에서의 한글 데이터 다루기
칼럼 19 : 역따옴표와 for 문의 조합
칼럼 20 : 아파치 로그를 정규표현으로 매칭
칼럼 21 : 슈퍼 데몬
칼럼 22 : telnet 활용법
칼럼 23 : 패킷의 내용을 조사하자
칼럼 24 : 지구 시뮬레이터
칼럼 25 : 암호 같은 함수명
칼럼 26 : 인라인 함수
칼럼 27 : 가역압축과 비가역압축
칼럼 28 : 이미지 처리 프로그램 디버그
칼럼 29 : 메모리상에 전개한 이미지 데이터 직접 다루기
칼럼 30 : C 프로그램에 이미지 삽입
칼럼 31 : 아스키 아트의 응용
칼럼 32 : C나 유닉스의 기초에 관한 권장 도서
칼럼 33 : GUI의 장점과 CUI의 장점
칼럼 34 : GNU hello
칼럼 35 : 정합성 검사가 딸린 형 변환
칼럼 36 : GDK가 정의하는 키 값
칼럼 37 : SVG 파일
칼럼 38 : 동적 메모리 관리 연구
칼럼 39 : 붙박이 모델
칼럼 40 : EffecTV
칼럼 41 : FourCC와 다양한 이미지 데이터 형식
칼럼 42 : ls…
칼럼 43 : 벤더 정보, 제품 정보
칼럼 44 : usbmuxd의 자동 실행
칼럼 45 : 종이 크기 정보 관리
칼럼 46 : 오류 정정 레벨
칼럼 47 : URI, URL, URN
칼럼 48 : 캡슐화와 추상 클래스
칼럼 49 : 유닛 테스트 도구
칼럼 50 : Boehm의 가비지 컬렉션
칼럼 51 : C 언어 프로그래밍에 의한 메서드 호출
칼럼 52 : 각양각색의 마우스 커서
칼럼 53 : 다시 그리기 처리의 최적화
칼럼 54 : 중심이 볼록 껍질에 반드시 포함되는 것에 대한 대수적 증명
칼럼 55 : 내적과 외적을 이용한 두 개의 벡터가 이루는 각도 계산
칼럼 56 : 이벤트 보내기
칼럼 57 : 자식 클래스의 인스턴스를 부모 클래스의 타입으로 다루기
칼럼 58 : 코드를 뒤에서부터 읽어가는 이유
칼럼 59 : 메모리 관리와 데이터 구조