1 유닉스 시스템 프로그래밍 개요.

Slides:



Advertisements
Similar presentations
Apr. 25, 2013 Laboratory of Systems Medicine BASIC LINUX COMMANDS.
Advertisements

1 장. 유닉스 개요 및 기본 사용법. Contents  학습목표  유닉스의 특징과 발전 과정을 이해한다.  유닉스 시스템에 접속하고 해제하는 방법을 익힌다.  유닉스 명령어의 사용법을 익힌다.  내용  유닉스 개요 유닉스의 역사와 특징, 구조  유닉스 시스템.
Format String Attack! 포맷 스트링 공격 경일대학교 사이버보안학과 학년 남주호.
ㅎㅎ C++ 프로그래밍의 첫 걸음 C++로 프로그래밍한다는 것의 의미 세상에서 가장 간단한 C++ 프로그램
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
1장 리눅스의 기본 개념과 프로그램 작성 리눅스의 기본 개념 시스템에 접속하기 리눅스의 프로그래밍 환경
제14장 동적 메모리.
Power Java 제3장 이클립스 사용하기.
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
리눅스 실습 정성훈.
1장. 이것이 C 언어다.. 1장. 이것이 C 언어다. 프로그래밍 언어 1-1 C 언어의 개론적 이야기 한글, 엑셀, 게임 등의 프로그램을 만들 때 사용하는 언어 ‘컴퓨터 프로그래머’라는 사람들이 제작 C 언어(C++ 포함)를 가장 많이 사용함.
cafe.naver.com/embeddedcrazyboys
컴퓨터 프로그래밍 기초 [Final] 기말고사
1 유닉스 시스템 프로그래밍 개요.
6 프로세스 생성과 실행.
6 프로세스 생성과 실행.
조 병 규 Software Quality Lab. 한국교통대학교
QT 프로그래밍 발표: 김래영.
제15장 파일 입출력 문자열을 출력하는 여러가지 방법 (15-2쪽) 문자열만 처리하는 입출력 함수
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express.
양방향 파이프의 활용 양방향 통신 파이프는 기본적으로 단방향이므로 양방향 통신을 위해서는 파이프를 2개 생성한다.
07. 디바이스 드라이버의 초기화와 종료 김진홍
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
Root Filesystem Porting
C / C++ Programming in multi platform
Dynamic Memory and Linked List
1. C++ 시작하기.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
프로세스 생성[1] 프로그램 실행 : system(3) #include <stdlib.h>
Root Filesystem Porting
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
Linux Master 김희승 임승한 OneScore 임승한.
파일 기술자 파일 기술자 현재 열려있는 파일을 구분하는 정수값 저수준 파일 입출력에서 열린 파일을 참조하는데 사용
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
WinCE Device Driver 실습 #3
Cross Compiler 설치.
파일 접근권한 제어 stat 구조체의 st_mode 항목에 파일의 종류와 접근권한 정보저장 st_mode 값의 구조.
11장. 1차원 배열.
Cross Compiler를이용한 커널 컴파일 및 포팅
Method & library.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
27장. 모듈화 프로그래밍.
Device Driver 임베디드 시스템 I.
19. 함수 포인터와 void 포인터.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
학기 C/C++ 프로그래밍 실습 1주차.
자바 5.0 프로그래밍.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
Internet Protocol and Programming
컴퓨터 프로그래밍 기초 [01] Visual Studio 설치 및 사용방법
( Windows Service Application Debugging )
함수(Function) ◈ 함수의 개념 및 사용 이유 ◈ 함수 정의, 호출 및 선언 ◈ 지역변수와 전역변수 ◈ return 문
Lab 1. 시스템 호출을 이용하는 mycp.c mycphint1.c & mycphint2.c coding & compile & run 제출 방법 (집에서도 접속 가능합니다) 2 Electronic versions: multi.incheon.ac.kr ( )의.
Internet Protocol and Programming
Linux 9.X 기초에서 활용까지 Chapter 06 VI 편집기.
 파일 아카이브와 압축 명령 익히기.
기초C언어 제2주 실습 프로그래밍의 개념, 프로그램 작성 과정 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
시스템 인터페이스 Lab1 X-window 및 명령어 사용.
Homework #3 (1/3) 다음을 수행한 후, 결과 파일들을 출력하여 제출한다.
4. 셸을 이용한 명령어 입력. Unix 시스템 쉘 간단한 셸 명령 명령 매개변수(Command arguments)
구조체(struct)와 공용체(union)
Internet Protocol and Programming
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
1장 C 언어의 개요 C 언어의 역사와 기원 C 언어의 특징 프로그램 과정 C 프로그램 구조 C 프로그램 예제.
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
Presentation transcript:

1 유닉스 시스템 프로그래밍 개요

학습목표 유닉스 시스템 관련 표준을 이해한다. 유닉스 시스템 프로그래밍이 무엇인지 이해한다. 시스템 호출과 라이브러리 함수의 차이를 이해한다. 유닉스 시스템의 기본 명령을 사용할 수 있다. C 컴파일러와 make 도구를 사용할 수 있다.

목차 유닉스 시스템의 역사 유닉스 시스템 표준 유닉스 시스템 프로그래밍이란 시스템 호출과 라이브러리 함수의 비교 유닉스 기본 명령 컴파일 환경과 Makefile 오류처리함수 동적 메모리 할당 함수 명령행 인자

유닉스 시스템의 역사 유닉스 시스템의 역사 1969 AT&T산하의 벨연구소에서 켄 톰슨과 데니스 리치가 개발 1973 C언어를 이용하여 재개발 -> 고급 언어로 작성한 최초의 운영체제 그 후 상용유닉스(시스템V) 계열과 BSD 계열로 분리하여 각각 발전 1989 AT&T와 썬마이크로시스템즈가 두 계열의 장점을 결합하여 SVR4를 공동개발 이 유닉스가 현재 사용하는 대부분의 유닉스의 기반임

유닉스 시스템 표준 ANSI C 표준 POSIX X/Open 가이드 시스템V 인터페이스 정의 미국 표준협회(ANSI)에서 표준화한 C 언어 명세 : ANSX3.159-1989 ISO가 이를 받아들여 ISO/IEC 9899:1990으로 발표함(www.iso.org) POSIX 서로 다른 유닉스 시스템 사이에서 상호 이식이 가능한 응용프로그램을 개발하기 위한 표준으로 IEEE에서 제정 POSIX.1(IEEE Std 1003.1) : C언어 응용 프로그래밍 인터페이스 표준 POSIX.2(IEEE Std 1003.2) : 표준 쉘과 유틸리티 프로그램 인터페이스 표준 X/Open 가이드 X/Open은 유럽의 유닉스 제조업체를 중심으로 설립한 단체로 개방형 시스템에 대한 표준을 정의하고 보급하고 있음 X/Open 이식성 가이드 : XPG3, XPG4 1996년 오픈소프트웨어재단과 합병하여 오픈그룹(The Open Group)으로 새 출발함 오픈 그룹이 UNIX에 대한 상표권 소유 시스템V 인터페이스 정의 SVID : 프로그램과 장치에서 이용할 수 있는 시스템 호출과 C라이브러리 표준 포함

유닉스 시스템 프로그래밍이란 단일 유닉스 규격(SUS) 유닉스시스템 프로그래밍의 정의 시스템 호출 라이브러리 함수 오스틴 그룹이 관리, IEEE와 오픈 그룹의 작업에 기반하여 SUSv3 발표 유닉스시스템 프로그래밍의 정의 유닉스에서 제공하는 시스템 호출을 사용해 프로그램을 작성하는 것을 의미 시스템 호출 유닉스 시스템이 제공하는 서비스를 이용해 프로그램을 작성할 수 있도록 제공되는 프로그래밍 인터페이스 기본적인 형태는 C 언어의 함수 형태로 제공 라이브러리 함수 라이브러리 : 미리 컴파일된 함수들을 묶어서 제공하는 특수한 형태의 파일 자주 사용하는 기능을 독립적으로 분리하여 구현해둠으로써 프로그램의 개발과 디버깅을 쉽게하고 컴파일을 좀 더 빠르게 할 수 있다 /lib, /usr/lib에 위치하며 lib*.a 또는 lib*.so 형태로 제공 리턴값 = 시스템호출명(인자, …);

시스템 호출 : 커널의 해당 서비스 모듈을 직접 호출하여 작업하고 결과 를 리턴 시스템 호출과 라이브러리 함수의 비교[1] 시스템 호출 : 커널의 해당 서비스 모듈을 직접 호출하여 작업하고 결과 를 리턴 라이브러리 함수 : 일반적으로 커널 모듈을 직접 호출안함 응용 프로그램 라이브러리 main() { 라이브러리 함수(); 시스템 호출(); } 라이브러리 함수 { … 시스템 호출(); } 시스템 호출 시스템 호출 코드 사용자 영역 커널 영역 커널 모듈 #n 커널 모듈 #n 커널 모듈 #n

라이브러리 함수 : man 페이지가 섹션 3에 속함 시스템 호출과 라이브러리 함수의 비교[2] 시스템 호출 : man 페이지가 섹션 2에 속함 라이브러리 함수 : man 페이지가 섹션 3에 속함 System Calls open(2) NAME open, openat - open a file SYNOPSIS #include <sys/types.h> Standard C Library Functions fopen(3C) NAME fopen - open a stream SYNOPSIS #include <stdio.h>

시스템 호출과 라이브러리 함수의 비교[3] 시스템 호출의 오류 처리방법 성공하면 0을 리턴, 실패하면 -1을 리턴 전역변수 errno에 오류 코드 저장 : man 페이지에서 코드값 확인 가능 01 #include <unistd.h> 02 #include <stdio.h> 03 04 extern int errno; 05 06 int main(void) { 07 if (access("unix.txt", F_OK) == -1) { 08 printf("errno=%d\n", errno); 09 } 10 11 return 0; 12 } [예제 1-1] 시스템 호출 오류 처리하기 ex1_1.c # vi /usr/include/sys/errno.h ...... /* * Error codes */ #define EPERM 1 /* Not super-user */ #define ENOENT 2 /* No such file or directory */ # ex1_1.out errno=2

시스템 호출과 라이브러리 함수의 비교[4] 라이브러리 함수의 오류 처리방법 man fopen에서 확인 오류가 발생하면 NULL을 리턴, 함수의 리턴값이 int 형이면 -1 리턴 errno 변수에 오류 코드 저장 01 #include <stdlib.h> 02 #include <stdio.h> 03 04 extern int errno; 05 06 int main(void) { 07 FILE *fp; 08 09 if ((fp = fopen("unix.txt", "r")) == NULL) { 10 printf("errno=%d\n", errno); 11 exit(1); 12 } 13 fclose(fp); 14 15 return 0; 16 } [예제 1-2] 라이브러리 함수 오류 처리하기 ex1_2.c # ex1_2.out errno=2 man fopen에서 확인 # ex1_2.out errno=2 man fopen에서 확인

유닉스 기본 명령[1] 로그인/로그아웃 프로세스 관련 명령 명령 기능 주요 옵션 예제 telnet 유닉스시스템에 접속 - telnet hanb.co.kr logout 유닉스시스템에서 접속해제 exit 명령 기능 주요 옵션 예제 ps 현재 실행 중인 프로세스의 정보를 출력 -ef : 모든 프로세스에 대한 상세 정보 출력 ps -ef ps -ef | grep ftp kill 프로세스 강제 종료 -9 : 강제 종료 kill 5000 kill -9 5001

유닉스 기본 명령[2] 파일/디렉토리 조작 명령 명령 기능 주요 옵션 예제 pwd 현재 디렉토리 경로 출력 - ls 디렉토리 내용 출력 -a : 숨김파일출력 -l : 파일 상세정보 출력 ls -a /tmp ls -l cd 현재 디렉토리 변경 cd /tmp cd ~han01 cp 파일/디렉토리 복사 -r : 디렉토리 복사 cp a.txt b.txt cp -r dir1 dir2 mv 파일/디렉토리 이름변경과 이동 mv a.txt b.txt mv a.txt dir1 mv dir1 dir2 rm 파일/디렉토리 삭제 -r : 디렉토리 삭제 rm a.txt rm -r dir1 mkdir 디렉토리 생성 mkdir dir1 rmdir 빈 디렉토리 삭제 mkdir dir2 cat 파일 내용 출력 cat a.txt more 파일 내용을 쪽단위로 출력 more a.txt chmod 파일 접근권한 변경 chmod 755 a.exe chmod go+x a.exe grep 패턴 검색 grep abcd a.txt

유닉스 기본 명령[3] vi 편집기 내부 명령 기능 명령 입력모드전환 i,a,o,O 명령모드전환 <Esc> 커서이동 j,k,h,l 또는 방향키 행이동 #G (50G, 143G 등) 또는 :행번호 한글자수정 r 여러글자수정 #s (5s, 7s 등) 단어수정 cw 명령취소 u, U 검색하여수정 :%s/aaa/bbb/g 복사 #yy (5yy, 10yy 등) 붙이기 p 커서이후삭제 D(shidt-d) 글자삭제 x, #x(3x,5x 등) 행삭제 (잘라내기) dd, #dd(3dd, 4dd 등) 저장하고종료 :wq! 또는 ZZ 저장않고종료 :q! 행 붙이기 J(shift-j) 화면다시표시 ctrl+l 행번호보이기 :set nu 행번호없애기 :set nonu

유닉스 기본 명령[4] 기타 명령 명령 기능 주요 옵션 예제 su 사용자 계정 변경 - : 변경할 사용자의 환경 초기화 파일 실행 su - su - han02 tar 파일/디렉토리 묶기 -cvf : tar파일생성 -tvf : tar파일내용보기 -xvf : tar파일풀기 tar cvf a.tar * tar tvf a.tar tar xvf a.tar whereis 파일 위치 검색 - whereis ls which which telnet

컴파일 환경[1] 컴파일이란 텍스트로 작성한 프로그램을 시스템이 이해할 수 있는 기계어로 변환하는 과정 보통 컴파일 과정과 라이브러리 링크 과정을 묶어서 수행하는 것을 의미 test.c test.o test.o+printf.o a.out #include main() { printf(“…\n”); } 0111010101010 11100001101010101010101010 1111000011111 1110101010101 0111010101010 11100001101010101010101010 1111000011111 1110101010101 0111010101010 11100001101010101010101010 1111000011111 1110101010101 111100010101011010101010111101010101010 컴파일 링크 실행파일 pritnf.o (libC.a) 111100010101011010101010111101010101010

컴파일 환경[2] GNU C 컴파일러 : gcc 대부분 GNU C 컴파일러 사용(www.sunfreeware.com) /usr/local/bin 디렉토리에 설치됨 -> 경로에 추가해야 함 C컴파일러 사용 # vi ~/.profile ...... PATH=$PATH:/usr/local/bin export PATH # . ~/.profile 바뀐 .profile 적용 # gcc test.c # ls a.out test.c # gcc -o test test.c # ls test test.c 기본 실행파일명은 a.out 실행파일명 지정은 -o 옵션

컴파일 환경[3] Makefile과 make 소스 파일이 여러 개를 묶어서 실행파일을 생성하는 도구 make 명령은 Makefile의 내용에 따라 컴파일, /usr/ccs/bin을 경로에 추가해야함 # vi ~/.profile ...... PATH=$PATH:/usr/local/bin:/usr/ccs/bin export PATH 01 #include <stdio.h> 02 extern int addnum(int a, int b); 03 04 int main(void) { 05 int sum; 06 07 sum = addnum(1, 5); 08 printf("Sum 1~5 = %d\n", sum); 09 10 return 0; 11 } [예제 1-3] 01 int addnum(int a, int b) { 02 int sum = 0; 04 for (; a <= b; a++) 05 sum += a; 06 return sum; 07 } ex1_3_addnum.c ex1_3_main.c

컴파일 환경[3] ex1_3_main.c와 ex1_3_addnum.c를 묶어서 add라는 실행파일 생성 01 # Makefile 02 03 CC=gcc 04 CFLAGS= 05 OBJS=ex1_3_main.o ex1_3_addnum.o 06 LIBS= 07 all: add 08 09 add: $(OBJS) 10 $(CC) $(CFLAGS) -o add $(OBJS) $(LIBS) 11 12 ex1_3_main.o: ex1_3_main.c $(CC) $(CFLAGS) -c ex1_3_main.c 14 ex1_3_addnum.o: ex1_3_addnum.c 15 $(CC) $(CFLAGS) -c ex1_3_addnum.c 16 17 clean: 18 rm -f $(OBJS) add core [예제 1-3] make 명령 사용하기 Makefile ex1_3_main.c와 ex1_3_addnum.c를 묶어서 add라는 실행파일 생성 # make gcc -c ex1_3_main.c gcc -c ex1_3_addnum.c gcc -o add ex1_3_main.o ex1_3_addnum.o # ls Makefile add* ex1_3_addnum.c ex1_3_addnum.o ex1_3_main.c ex1_3_main.o # add Sum 1~5 = 15

오류 처리 함수[1] 오류 메시지 출력 : perror(3) # ex1_4.out #include <stdio.h> void perror(const char *s); 01 #include <sys/errno.h> 02 #include <unistd.h> 03 #include <stdlib.h> 04 #include <stdio.h> 05 06 int main(void) { 07 if (access("unix.txt", R_OK) == -1) { 08 perror("unix.txt"); 09 exit(1); 10 } 11 12 return 0; 13 } [예제 1-4] perror 함수 사용하기 # ex1_4.out unix.txt: No such file or directory ex1_4.c 오류에 따라 메시지 자동 출력

오류 처리 함수[2] 오류 메시지 출력 : strerror(3) # ex1_5.out #include <string.h> char *strerror(int errnum); 01 #include <sys/errno.h> 02 #include <unistd.h> 03 #include <stdlib.h> 04 #include <stdio.h> 05 #include <string.h> 06 07 extern int errno; 08 09 int main(void) { 10 char *err; 11 12 if (access("unix.txt", R_OK) == -1) { 13 err = strerror(errno); 14 printf(“오류:%s(unix.txt)\n", err); 15 exit(1); 16 } 17 18 return 0; 19 } [예제 1-5] strerror 함수 사용하기 ex1_5.c 오류에 따라 메시지를 리턴 # ex1_5.out 오류: No such file or directory(unix.txt)

동적 메모리 할당[1] 메모리할당 : malloc(3) 메모리할당과 초기화 : calloc(3) 인자로 지정한 크기의 메모리 할당 메모리할당과 초기화 : calloc(3) nelem * elsize 만큼의 메모리를 할당하고, 0으로 초기화 #include <stdlib.h> void *malloc(size_t size); char *ptr ptr = malloc(sizeof(char) * 100); #include <stdlib.h> void *calloc(size_t nelem, size_t elsize); char *ptr ptr = calloc(10, 20);

동적 메모리 할당[2] 메모리 추가 할당: realloc(3) 메모리 해제 : free(3) 이미 할당받은 메모리(ptr)에 size 크기의 메모리를 추가로 할당 메모리 해제 : free(3) 사용을 마친 메모리 반납 #include <stdlib.h> void *realloc(void *ptr, size_t size); char *ptr, *new; ptr = malloc(sizeof(char) * 100); new = realloc(ptr, 100); #include <stdlib.h> void free(void *ptr);

명령행 인자[1] 명령행 : 사용자가 명령을 입력하는 행 명령행 인자 : 명령을 입력할 때 함께 지정한 인자(옵션, 옵션인자, 명령인자 등) 명령행 인자의 전달 : main 함수로 자동 전달 int main(int argc, char *argv[]) 01 #include <stdio.h> 02 03 int main(int argc, char *argv[]) { 04 int n; 05 06 printf("argc = %d\n", argc); 07 for (n = 0; n < argc; n++) 08 printf("argv[%d] = %s\n", n, argv[n]); 09 10 return 0; 11 } [예제 1-6] 명령행 인자 출력하기 ex1_6.c # ex1_6.out -h 100 argc = 3 argv[0] = ex1_6.out argv[1] = -h argv[2] = 100

명령행 인자[2] 옵션 처리함수: getopt(3) 유닉스 명령의 옵션 규칙 #include <stdio.h> argc, argv : main 함수에서 받은 것을 그대로 지정 optstring : 사용할 수 있는 옵션 문자, 옵션에 인자가 있을 경우 문자 뒤에 ‘:’추가 optarg : 옵션의 인자 저장 optind : 다음에 처리할 argv의 주소 optopt : 오류를 발생시킨 문자 opterr : 오류 메시지를 출력하지 않으려면 0으로 지정 유닉스 명령의 옵션 규칙 옵션의 이름은 한글자여야 하며, 모든 옵션의 앞에는 하이픈(-)이 있어야 한다. 인자가 없는 옵션은 하나의 – 다음에 묶여서 올 수 있다(-xvf) 옵션의 첫 번째 인자는 공백이나 탭으로 띄고 입력한다. 인자가 있어야 하는 옵션에서 인자를 생략할 수 없다. 명령행에서 모든 옵션은 명령의 인자보다 앞에 와야한다. 옵션의 끝을 나타내기 위해 --를 사용할 수 있다. #include <stdio.h> int getopt(int argc, char * const argv[], const char *optstring); extern char *optarg; extern int optind, opterr, optopt;

명령행 인자[3] 옵션 처리 [예제 1-7] getopt 함수 사용하기 ex1_7.c # ex1_7.out 01 #include <stdio.h> 02 03 int main(int argc, char *argv[]) { 04 int n; 05 extern char *optarg; 06 extern int optind; 07 08 printf("Current Optind : %d\n", optind); 09 while ((n = getopt(argc, argv, "abc:")) != -1) { 10 switch (n) { 11 case 'a': 12 printf("Option : a\n"); 13 break; 14 case 'b': 15 printf("Option : b\n"); 16 break; 17 case 'c': printf("Option : c, Argument=%s\n", optarg); 19 break; 20 } 21 printf("Next Optind : %d\n", optind); 22 } 23 24 return 0; 25 } [예제 1-7] getopt 함수 사용하기 ex1_7.c # ex1_7.out Current Optind : 1 # ex1_7.out -a Option : a Next Optind : 2 # ex1_7.out -c ex1_7.out: option requires an argument -- c # ex1_7.out -c name Option : c, Argument=name Next Optind : 3 # ex1_7.out -x ex1_7.out: illegal option -- x

프로그래밍 표준 유닉스 시스템 프로그래밍이란 시스템 호출과 라이브러리 함수 유닉스 시스템 프로그래밍 도구 유닉스 시스템 프로그래밍과 관련 표준으로는 ANSI C, IEEE의 POSIX, X/Open그룹의 XPG3, XPG4, SVID, SUS가 있다. 유닉스 시스템 프로그래밍이란 유닉스 시스템이 제공하는 다양한 서비스를 이용하여 프로그램을 구현할 수 있도록 제공되는 프로그 래밍 인터페이스를 시스템 호출이라고 하며, 이러한 시스템 호출을 사용하여 프로그램을 작성하는 것 을 유닉스 시스템 프로그래밍이라고 한다. 시스템 호출과 라이브러리 함수 시스템 호출은 기본적인 형식은 C언어의 함수 형태로 제공된다. 시스템 호출은 직접 커널의 해당 모 듈을 호출하여 작업을 하고 결과를 리턴한다. 라이브러리 함수들은 커널 모듈을 직접 호출하지 않는 다. 라이브러리 함수가 커널의 서비스를 이용해야 할 경우에는 시스템 호출을 사용한다. man 명령을 사용할 때 시스템 호출은 섹션 2에 있고, 라이브러리 함수들은 섹션 3에 배치된다. 따라 서 'man -s 2 시스템호출명'과 같이 사용한다. 시스템 호출은 오류 발생시 -1을 리턴하고 라이브러리 함수는 NULL 값을 리턴한다. 유닉스 시스템 프로그래밍 도구 기본 명령 : pwd, ls, cd, mkdir, cp, mv, rm, ps, kill, tar, vi 오류처리함수 : perror, strerror 동적메모리 할당 함수 : malloc, calloc, realloc, free 명령행인자 처리 함수 : getopt - 컴파일 : GNC C 컴파일러(gcc) - 컴파일 도구 : make명령과 Makefile