유닉스 시스템 프로그래밍
미국 클렘슨 대학 컴퓨터 공학과 부교수 아담 후버의 『유닉스 시스템 프로그래밍』. 유닉스와 리눅스 환경에서의 시스템 프로그래밍의 도구와 리소스를 다루어 프로그램을 작성하는 것을 목표로 저술된 교재다. 최소한 C 기본 문법을 아는 사람들을 대상으로 삼았다. 라이브러리와 디버거, 스크립트 언어와 시스템 콜, 그리고 GUI 환경과 쉘 환경 등에 대해 배울 수 있다. 아울러 시스템 프로그램과 함께 저수준 데이터 타입에 대해서 다룬다. 시스템 프로그래밍의 개념을 잡게 될 것이다.
Couldn't load pickup availability
출판사 리뷰
출판사 리뷰
본 책은 독자가 시스템 프로그래밍의 도구와 리소스를 보다 효과적으로 다루어 프로그램을 작성케 하는 것이 목표다. 라이브러리는 무엇이고 어떻게 쓰는가? 디버거는 무엇이고 개발 때 어떤 도움을 주나? 스크립트 언어란 무엇이고 언제 유용한가? 시스템 콜이란 무엇이고 언제 유용한가? 혹자는 GUI 환경보다 쉘 환경을 더 좋아하는데 그 이유는 무엇일까? 본 책으로 시스템 프로그램을 공부하면 질문에 답할 수 있을 것이다.
시스템 프로그램과 함께 이 책은 저수준 데이터 타입에 대해서도 다룬다. 비트, 바이트, 비트 연산, 배열, 스트링, 구조체와 포인터를 다룬다. 이런 류는 메모리에 대해 논할 때 살펴보고 언제 어떻게 사용되는지도 알아볼 것이다. 메모리 레벨에서 코드를 이해하는 것이 보다 고급 주제의 프로그래밍 개념을 잡을 때 도움이 된다. 저수준 데이터 타입을 다루면서 이전에 배웠던 내용을 보다 확실히 이해할 것이다. 점점 수준을 높여가며 프로그램을 익히게 하여 책에서 다룬 주제를 확실히 알고 사용할 수 있게 하였다. (저자 서문 중에서)
시스템을 이해해야 이를 활용할 수 있다. 이는 당연한 말입니다. 하지만 이 당연한 말을 잊고 사는 것 같다는 생각이 듭니다. 취업을 위해서 C를 해야 하나요 자바를 해야 하나요라고 묻는 후배들을 볼 때 C나 자바보다 시스템을 아는 것이 중요하다고 얘기해 줍니다. C나 자바라는 언어는 시스템의 자원을 가져다가 쓰게 해 주는 방법입니다. 프로세스를 만들고 쓰레드를 만들고 네트워크를 통한 데이터를 전송하는 것은 결국 시스템의 자원을 활용하는 것입니다. 프로그램을 처음 만들 때는 시스템에 대해 별 고민 없이 만들지 모르지만 점점 더 대규모의 프로그램을 만들어야 하는 상황이 오게 되면 가장 효과적인 방법을 고민해야 하고 한계가 무엇인지 알아야 합니다. 이것은 시스템을 이해할 때 가능한 것입니다. 기본을 잘 해야 깊이 있는 프로그래머가 될 수 있습니다. 본 책은 시스템 프로그램에 대해 쉽고 체계적으로 설명하고 있습니다. 개념과 필요성 그리고 간결한 예제로 설명하고 있습니다. 특히 처음 시작하는 사람들이 어려워하는 포인터나 메모리 개념을 메모리 맵을 활용하여 잘 설명하고 있는 것이 인상적입니다. 본 책을 통해 시스템을 보는 눈의 폭이 넓어질 뿐 아니라 구현을 할 때도 도움이 되리라 생각합니다. (역자 서문 중에서)
목차
목차
1.1 시스템 프로그래밍
1.1.1. 필요한 배경 지식
1.1.2 왜 Unix인가?
1.1.3 왜 C인가?
1.2 세 가지 툴
1.2.1 쉘
1.2.2 텍스트 에디터
1.2.3 디버거
1.2.4 통합 개발 환경(IDE)
1.3 디버깅 방법
1.3.1 프로그램 크래시
1.3.2 무한 루프에 빠졌을 때
1.3.3 프로그램의 부분 실행
1.3.4 루프가 오동작할 때
1.4 프로그램 개발
1.5 C의 리뷰
1.5.1 기본 데이터 타입
1.5.2 기본 수치 연산
1.5.3 루프
1.5.4 조건문과 블록
1.5.5. 흐름 제어
연습 문제
2장 비트, 바이트, 데이터 타입
2.1 비트 모델
2.1.1 magnitude-only 비트 모델
2.1.2 sign-magnitude 비트 모델
2.1.3 2의 보수 비트 모델
2.1.4 부동 소수점 비트 모델
2.1.5 ASCII와 유니코드 비트 모델
2.1.6. 비트 모델 요약
2.2 비트 연산
2.2.1 이진 논리 연산
2.2.2 비트 연산자
2.2.3 비트마스크 연산7
2.3 메모리 맵
연습 문제
3장 배열과 스트링
3.1 배열
3.1.1 다차원 배열
3.2 스트링2
3.2.1 다차원 스트링
3.3 스트링 라이브러리 함수
3.3.1 스트링 길이: strlen()
3.3.2 스트링 비교: strcmp()
3.2.3 스트링 복사: strcpy()
3.3.4 스트링 연결하기: strcat()
3.3.5 스트링 출력: sprint()
3.3.6 스트링 함수 예제
3.3.7 라이브러리로 해결할 수 없는 문제들
3.4 커맨드 라인 인자
연습 문제
4장 포인터와 구조체
4.1 포인터
4.1.1. 포인터 연산
4.2 포인터 사용
4.2.1 함수의 값을 되돌려 주기
4.2.2 포인터와 배열
4.2.3 동적 메모리 할당
4.2.4 이중 포인터
4.3 구조체
4.4 구조체 사용
4.4.1 배열과 구조체
4.4.2 정의와 스코프
4.4.3 중첩 구조체
4.4.4 포인터와 구조체
연습 문제
5장 입출력
5.1 스트림
5.1.1 스트림을 통한 바이트 이동
5.1.2 시스템 입출력 함수
5.1.3 표준 스트림
5.2. 버퍼
5.3 파이프
5.3.1 파이프라인 체인
5.3.2 프로그램 테스트
5.4 파일
5.4.1 파일 포인터
5.4.2 파일 속성
5.4.3 디렉토리
5.5 디바이스
5.5.1 디바이스 드라이버
연습 문제
6장 프로그램 관리
6.1 프로그램 빌딩
6.1.1 목적 코드와 링크
6.1.2 컴파일
6.1.3 Makefiles
6.1.4 기타 빌드 툴
6.2 코드 구성
6.2.1 함수
6.2.2 다중 파일
6.2.3 변수 스코프
6.2.4 주석, 들여쓰기, 변수 이름
6.2.5 전처리
6.2.6 typedef
6.2.7 토론
6.3 프로그램 배포 방법
6.3.1 아카이브
6.3.2 패키지
연습 문제
7장 시스템 콜
7.1 오퍼레이션 패밀리
7.2 라이브러리와 시스템 콜
7.3 프로세스 시스템 콜
7.3.1 프로세스
7.3.2 fork()
7.3.3 exec() 류
7.3.4 wait()
7.4 시그널 시스템 콜
7.4.1 signal()
7.4.2 kill()
7.5 소켓 시스템 콜
7.5.1 네트워크 개념과 시스템 명령
7.5.2 클라이언트 서버 모델
7.5.3 예제
연습 문제
8장 라이브러리
8.1 라이브러리 사용
8.1.1 헤더 파일
8.1.2 라이브러리 파일
8.2 라이브러리의 목적
8.3 C 표준 라이브러리
8.4 Curses 라이브러리
8.4.1 I/O 콘트롤
8.4.2 동적 그래픽
8.5 X 라이브러리
8.5.1 윈도우
8.5.2 2차원 그래픽
8.5.3 그래픽 속성
8.5.4 사용자 입력
8.5.5 폰트
8.6 라이브러리 만들기
8.7 라이브러리의 함정
연습 문제
9장 스크립트 언어
9.1 스크립트 언어를 시작하며
9.2 쉘 스크립트
9.2.1 입력/출력
9.2.2 변수
9.2.3 루프
9.2.4 조건문
9.2.5 쉘 외부 프로그램
9.2.6 기타 기능
9.3 펄
9.3.1 입/출력
9.3.2 변수
9.3.3 루프와 조건문
9.3.4 패턴 대체
9.3.5 기타
9.4 MATLAB
9.4.1 입출력
9.4.2 변수
9.4.3 반복문과 조건문
9.4.4 내장 수학 함수
9.4.5 그리기
9.4.6 기타 기능
9.5 토론
연습 문제
부록 A ASCII 표
부록 B 공통 쉘 명령어
부록 C 시스템 프로그램
찾아보기
저자
저자
Your payment information is processed securely. We do not store credit card details nor have access to your credit card information.

