메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

초보자가 리눅스 전문 개발자가 되는 그림책

한빛미디어

|

2003-08-26

|

by HANBIT

13,544

리눅스는 신뢰성과 확장성이 뛰어나 인터넷 서비스 제공업체, 기업 네트워킹 전문가 및 많은 프로그래머와 시스템 개발자들 사이에서 최고의 운영체제로 매우 빠르게 성장하고 있다. 특히 확장성뿐만 아니라 비용 측면도 고려해 보았을 때, 오픈 소스 기반인 리눅스는 저렴한 운영체제로서 최상의 선택이 될 수 있다. 이에 따라 리눅스는 개인 사용자뿐만 아니라 단체 및 기업, 심지어는 정부 기관에 이르기까지 그 수요가 나날이 급증하고 있으나 막상 리눅스 프로그래밍에 부담없이 접근할 수 있도록 도움을 줄만한 도서는 그리 많지 않다.

이와 같은 문제로 고민을 하고 있는 리눅스 프로그래밍에 관심있는 초보자들을 위해 리눅스 환경의 C 프로그래밍 기초부터 고급 주제까지를 상세하게 다루고 있는 책이 출간되었다. 바로 『초보자를 위한 Linux Unix C 프로그래밍』이 그것이다. 이 책의 저자인 김종훈 교수는 이 책의 집필동기를 다음과 같이 밝혔다. "연구소에서 운영체제를 개발하고 대학에서 리눅스 프로그래밍을 강의하기 위해, 수십 권의 리눅스/유닉스 프로그래밍 도서를 검토해 보았다. 그러나 대부분이 이해하기 너무 힘들고 이미 C 프로그래밍 정도는 알고 있다는 전제로 내용이 전개되고 있거나 다루는 내용이 너무 방만하게 전개되고 있었다. 몇몇 책은 리눅스에서의 초보 C 프로그래밍을 내용으로 하고 있으나 리눅스에서의 C 프로그래밍이라기보다는 일반적인 C 언어만을 다루고 있었다. 이러한 이유로 필자는 프로그래밍에 대해 전혀 모르는 초보자도 볼 수 있으면서도 고급 주제까지 다루는 리눅스 C 프로그래밍 책의 필요성을 절실히 느끼게 되어 이 책을 집필하게 된 것이다."

고급 리눅스 프로그래밍만 다루고 있거나 일반 C 프로그래밍만 다루고 있는 타 서적들과는 달리 이 책은 C 프로그래밍 기초, 라이브러리 함수, 고급 리눅스 C 프로그래밍, 네트워크 프로그래밍까지의 모든 내용을 체계적으로 구성하고 있어, 독자들은 이 책 한 권만으로도 리눅스 C 프로그래밍을 마스터 할 수 있다. 또한 독자들을 위한 홈페이지(http://www.jejue.ac.kr/~jkim)를 저자가 직접 운영하고 있어 독자들은 사이버 학습 효과도 누릴 수 있다. [자료실] 코너를 통해 예제 프로그램 소스를 제공하고, 독자들은 [리눅스 C 프로그래밍] 코너를 통해 책 내용과 관련하여 궁금했던 점을 저자에게 직접 질문할 수 있다. 이 외에도 리눅스 C 프로그래밍과 관련된 각종 다양한 정보가 계속 추가될 예정이다.


초보자를 위한 Linux Unix C 프로그래밍

참고 도서

초보자를 위한 Linux Unix C 프로그래밍
김종훈, 김종진, 김동균




마지막으로 본격적인 출간에 앞서, 이 책의 주요 내용을 살펴보자면 다음과 같다.


1장. 들어서기
리눅스와 C 언어, 그리고 왜 리눅스에서 C 언어를 이용해야 하는지에 대해 살펴보고, 관련 사이트를 간단히 소개한다. 그리고 리눅스에서 C 프로그램을 작성하고 실행시키기까지의 과정을 따라 하며 경험한다.

1부. C 프로그래밍 기초
C 언어에 대해 전혀 모르는 초보자를 위해 C 프로그래밍 기초에 대해 설명한다. 그림을 통한 알기 쉬운 설명과 다양한 프로그램 예제를 경험하므로 어느 새 C 언어는 내 것이 된다.
2장. C 프로그램 구조 이해하기
가장 기본적인 구조의 C 프로그램을 통해 기본 틀을 익힌 후, C 프로그램을 상수를 이용한 경우, 변수를 이용한 경우, 함수를 이용한 유형별로 살펴봄으로써 C 프로그램의 전반적인 구조를 이해한다.
3장. 연산자와 제어문
연산자란 무엇을 연산할 것인지를 나타내는 부분으로 C 언어에서는 산술, 관계, 대입, 논리, 비트, 시프트, 콤마, 조건, sizeof 등의 연산자가 있다. 프로그램의 실행은 위에서부터 아래로 순차적으로 이루어지고 이러한 실행 순서를 변경하는 것이 제어문으로 if 문, switch 문, while 문, for 문, do-while 문, break 문, continue 문이 있다.
4장. 배열과 포인터
가장 기본이 되는 데이터 구조인 배열의 개념과 종류를 알아본다. 그리고 포인터를 이용해 이런 데이터가 저장된 주소를 어떻게 다루는지를 통해 포인터와 배열의 관계를 살펴본다.
5장. 함수
C 프로그램은 특정 작업을 처리하는 단위인 함수가 모여 이루어진다. 5장에서는 함수를 선언, 정의, 호출하는 방법을 알아보고, 함수 간에 데이터를 주고 받는 방법, 기억 클래스, 재귀호출 등 함수와 관련된 다양한 주제에 대해 살펴본다.
6장. 구조체와 공용체
데이터형이 다른 변수를 하나로 묶어 놓은 모임인 구조체를 사용하는 방법을 알아보고, 중첩 구조체, 자기 참조 구조체에 대해 살펴본다. 그리고 구조체와 유사하지만 구조체와 달리 데이터 간에 기억장소를 공유해 자원 낭비를 줄일 수 있는 공용체에 대해 살펴본다.
2부. 리눅스 C 라이브러리 함수
리눅스에서 제공하는 C 라이브러리를 상세한 설명과 예제를 통해 설명한다. 이러한 라이브러리는 프로그래밍에 있어서 매우 중요한 자원으로 이를 적절히 사용함으로써 쉬우면서도 효율적인 프로그램을 작성할 수 있게 된다.
7장. 전처리기
프로그램을 실행하기 위해서는 컴파일로 소스 파일을 실행 파일로 변환해야 하고 컴파일 전에 임의의 수식이나 상수를 정의하거나 필요한 외부 파일을 삽입해야 하는 데, 이러한 일을 하는 것이 전처리기다.
8장. 문자와 문자열 처리 함수
문자 판별 함수, 문자 변환 함수, 문자열 연결 함수, 문자열 비교 함수, 문자열 복사 함수, 문자열 길이 계산 함수, 문자열 검색 함수, 문자열을 단어로 자르는 함수 등 라이브러리에서 제공하는 문자와 문자열을 처리하는 함수를 사용하는 방법을 알아본다.
9장. 데이터 변환 함수
10진 정수 형태의 문자열을 정수로 변환하는 함수, 10진 실수 형태의 문자열을 실수로 변환하는 함수, 특정 진수 형태의 문자열을 정수로 변환하는 함수 등과 같은 표준 라이브러리에서 제공하는 데이터 변환 함수를 사용하는 방법을 알아본다.
10장. 메모리 관리 함수
동적 메모리 할당과 해제 함수, 메모리 크기 변경 함수, 메모리 초기화 함수, 메모리 영역 복사 함수, 메모리 영역 검색, 비교 함수 등 표준 라이브러리에서 제공하는 메모리 관리 함수를 사용하는 방법을 알아본다.
11장. 입출력 함수
프로그램에서 가장 기본적이면서도 중요한 동작을 위해 라이브러리에서는 제공하는 40개에 가까운 입출력 함수 중 대표적으로 사용되는 25개의 입출력 함수들에 대해 설명한다.
12장. 수학 함수
절대값 함수, 나머지 함수, 난수 함수, 거듭제곱과 제곱근 함수 등 라이브러리에서 제공하는 수학 함수를 사용하는 방법을 알아본다.
13장. 탐색과 정렬 함수
선형 탐색 함수, 이진 탐색 함수, 이진 트리 관리 함수, 해시 테이블 관리 함수, 퀵 정렬 함수 등 라이브러리에서 제공하는 탐색과 정렬 함수를 사용하는 방법을 알아본다.
14장. 날짜와 시간 함수
현재 시간을 표시하는 함수, 시간 정보를 보기 좋은 형식으로 변환하는 함수, 시간차를 구하는 함수 등 라이브러리에서 제공하는 날짜와 시간과 관련된 함수를 사용하는 방법을 알아본다.
3부. 리눅스 C 프로그래밍 관련 툴
리눅스에서 효율적인 C 프로그래밍을 위한 툴인 vi, gcc, make, gdb를 사용하는 방법을 설명한다. 이들 툴에 대한 사용법을 익힘으로 프로그래밍을 할 때 효율성을 증대할 수 있게 된다.
15장. vi로 편집하기
기능이 강력하고 작은 메모리에서도 빠르게 동작해 가장 많이 사용되는 에디터 중 하나인 vi를 사용해 C 프로그램을 작성하기 위해 알아야 할 사항을 실습과 함께 하나하나 점검해 본다.
16장. gcc로 컴파일하기
gcc를 이용해 전처리, 컴파일, 어셈블링, 링크 등의 여러 단계를 거쳐 소스 파일을 실행 파일로 변환하는 과정을 살펴보고, 프로그래밍의 효율을 높일 수 있도록 gcc가 제공하는 다양한 기능을 알아본다.
17장. make로 컴파일 자동화하기
여러 파일로 이루어진 큰 프로그램을 개발할 때 필수적인 툴인 make는 파일 상호간의 의존성을 이용해 컴파일하는 데 드는 시간을 크게 절약해준다. 그래서 여러 개의 파일로 이루어진 큰 프로그램을 개발할 때 필수적이다.
18장. gdb로 디버깅하기
C, C++ 디버깅 툴인 gdb는 프로그램을 실행시키면서 디버깅할 수 있고, 또한 코어 덤프된 프로그램의 버그도 조사할 수 있다. 그리고 gdb 안에서 프로그램을 실행시키면서 디버깅할 수 있고 이미 실행중인 프로세스에 대해서도 디버깅이 가능하다.
4부. 리눅스가 동작하는 프로그래밍
진정한 리눅스 C 프로그래밍을 다루는 부분으로, 리눅스 운영체제와 직접적인 연관을 갖는 다양한 주제의 내용에 대해 설명한다. 그림을 통한 쉬우면서도 명확한 설명과 다양한 예제로 이루어진 이러한 내용을 학습하게 되면 독자는 진정한 리눅스 프로그래머가 되어 있을 것이다.
19장. 오류 처리하기
라이브러리 함수를 이용하다가 발생하는 오류의 원인을 파악하는 방법과 이를 처리하는 다양한 방법을 소개한다.
20장. 리눅스 프로그램 환경
임의의 환경에서 실행되는 프로그램의 환경 정보를 얻어 이를 효율적으로 활용하는 방법을 알아보고 다양한 프로그램을 작성해본다.
21장. 시스템에서 제공하는 파일 입출력
시스템에서 제공하는 파일 입출력 기능을 이용해 파일 읽기/쓰기, 파일 생성, 파일 크기 변경, 파일 연결 등 다양한 주제를 프로그램과 함께 살펴본다.
22장. 파일과 디렉토리 다루기
이 장에서 다루는 내용은 우리가 사용하는 대부분의 파일과 디렉토리에 관련된 명령어들을 구현하는 데 기반이 되는 기술이다.
23장. 프로세스 제어하기
현재 실행 중에 있는 프로그램인 프로세스를 어떻게 생성하고 종료하는지, 그리고 프로세스를 제어하는 방법에 대해 알아본다. 그리고 간단한 셸도 직접 구현해 본다.
24장. 시그널 - 키 눌러도 끄떡없는 프로그램 만들자
키와 같이 프로세스에 보내는 메시지인 시그널이 무엇인지 자세히 살펴보고 프로그램에 시그널을 보내는 방법과 시그널이 도착했을 때 대처하는 방법 등을 알아본다.
5부. 통신과 네트워크 프로그래밍
한 시스템 내의 서로 다른 프로세스 간에 통신하는 프로그램을 구현하는 다양한 주제와 네트워크로 연결된 프로세스 간에 통신이 이루어지는 프로그램인 네트워크 프로그램을 구현하는 방법에 대해 살펴보고 채팅 프로그램을 비롯해서 다양한 프로그램을 직접 구현한다.
25장. 파일과 파이프를 이용한 통신
파일이나 파이프를 이용해 여러 프로세스가 서로 데이터를 주고 받는 프로세스 간 통신에 대해 알아본다. 파일을 이용한 통신이 제대로 이루어지기 위해서는 레코드 잠금이 필요하므로 이에 대해 살펴보고, 파이프를 이용한 통신은 일반적인 파이프와 FIFO로 구분할 수 있는 데 이에 대해 살펴본다.
26장. 메시지 큐, 공유 메모리, 세마포어를 이용한 통신
메시지 큐, 공유 메모리, 세마포어를 이용해 프로세스 간 통신하는 프로그램을 구현해본다. 즉, 프로세스가 메시지 큐를 이용해 데이터를 주고 받고, 공유 메모리를 이용해 데이터를 공유하며, 세마포어는 공유하는 데이터의 접근에 필요한 동기화를 제공함으로써 통신이 이루어진다.
27장. 기본 네트워크 프로그래밍
네트워크로 연결된 프로세스 간에 통신이 이루어지는 프로그램을 네트워크 프로그램이라 하는 데, 통신 방법에 따라 크게 TCP와 UDP로 구분하여 구현할 수 있다. TCP를 이용한 네트워크 프로그램은 속도는 느리나 신뢰성을 보장하고, UDP를 이용한 네트워크 프로그램은 신뢰성은 보장되지 않으나 빠른 속도를 제공한다. 이 장에서는 네트워크 프로그래밍, TCP, UDP에 대한 개념을 살펴보고 직접 TCP와 UDP를 이용해서 간단한 네트워크 프로그램을 구현해본다.
28장. 고급 네트워크 프로그래밍
27장에서 살펴본 내용을 기반으로 여러 클라이언트와 서버 간에 통신하는 프로그램과 비순차적 통신인 채팅 프로그램을 구현해본다.
TAG :
댓글 입력
자료실