(본 강의 노트는 한빛 아카데미의 <유닉스 시스템 프로그래밍> 책을 기반으로 하고 있습니다)
Ch01. 유닉스 시스템 프로그래밍 개요
학습목표
- 유닉스 시스템 관련 표준을 이해한다
- 유닉스 시스템 프로그래밍이 무엇인지 이해한다
- 시스템 호출과 라이브러리 함수의 차이를 이애한다
- 유닉스 시스템의 기본 명령을 사용할 수 있다.
- C 컴파일러와 make 도구를 사용할 수 있다.
목차
- 개요
- 유닉스 시스템 표준
- 유닉스 시스템 프로그래밍이란
- 유닉스 시스템 도구
01. 개요
: 생략
02. 유닉스 시스템 표준
- ANSI C 표준
- 미국 표준협회(ANSI)에서 표준화한 C언어 명세
- POSIX
- portable unix
- 서로 다른 유닉스 시스템 사이에서 상호 이식이 가능한 응용프로그램을 개발하기 위한 표준으로 IEEE에서 제정
- X/Open 가이드
- 유럽의 유닉스 제조업체를 중심으로 설립한 단체
- 개방형 시스템에 대한 표준을 정의하고 보급하고 있음
- 시스템V 인터페이스 정의
- SVID: 프로그램과 장치에서 이용할 수 있는 시스템 호출과 C라이브러리 표준 포함
03. 유닉스 시스템 프로그래밍이란
- 단일 유닉스 규격(SUS)
- IEEE와 오픈 그룹의 작업에 기반하여 발표
- 유닉스 시스템 프로그래밍의 정의
- 유닉스에서 제공하는 시스템 호출을 사용해 프로그램을 작성하는 것을 의미
- 시스템 호출
- 유닉스 시스템이 제공하는 서비스를 이용해 프로그램을 작성할 수 있도록 제공되는 프로그래밍 인터페이스
- 기본적인 형태는 C언어의 함수 형태로 제공
- 라이브러리 함수
- 라이브러리 : 미리 컴파일된 함수들을 묶어서 제공하는 특수한 형태의 파일
- 자주 사용하는 기능을 독립적으로 분리하여 구현해둠으로써 프로그램의 개발과 디버깅을 쉽게하고 컴파일을 좀 더 빠르게 할 수 있다.
04. 유닉스 시스템 도구
시스템 호출과 라이브러리 함수의 비교
- 시스템 호출
- 커널의 해당 서비스 모듈을 직접 호출하여 작업하고 결과를 리턴
- 성공하면 0을 리턴, 실패하면 -1을 리턴
- 오류 발생 시, 전역변수 errno에 오류 코드를 저장
- 라이브러리 함수
- 일반적으로 커널 모듈을 직접 호출 안함
- 오류 발생 시 NULL을 리턴, 함수의 리턴값이 정수형이면 -1을 리턴
- errno 변수에 오류 코드 저장
유닉스 기본 명령
- 로그인/ 로그아웃
명령 |
기능 |
주요 옵션 |
예제 |
telnet |
유닉스시스템에 접속 |
- |
telnet hanb.co.kr |
logout |
유닉스시스템에서 접속해제 |
- |
logout |
exit |
- |
exit |
- 프로세스 관련 명령
명령 |
기능 |
주요 옵션 |
예제 |
ps |
현재 실행 중인 프로세스의 정보를 출력 |
-ef : 모든 프로세스에 대한 상세 정보 출력 |
ps ps -ef ps -ef | grep ftp |
kill |
프로세스 강제 종료 |
-9 : 강제 종료 |
kill 5000 kill -9 5001 |
- 파일/디렉토리 조작 명령
명령 |
기능 |
주요 옵션 |
예제 |
pwd |
현재 디렉토리 경로 출력 |
- |
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 |
- 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 |
- 기타 명령
명령 |
기능 |
주요 옵션 |
예제 |
su |
사용자 계정 변경 |
- : 변경할 사용자의 환경 초기화 파일 실행 |
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 |
컴파일 환경
- 컴파일이란?
- 텍스트로 작성한 프로그램을 시스템이 이해할 수 있는 기계어로 변환하는 과정
- 보통 컴파일 과정과 라이브러리 링크 과정을 묶어서 수행하는 것을 말함
- GNU C 컴파일러 : gcc (대부분 GNU C 컴파일러 사용)
- gcc test.c : 기본 실행 파일명은 a.out으로 아웃풋 저장
- gcc -o test test.c : 실행 파일명 지정은 -o option으로, test로 저장
Makefile & make
: 소스 파일이 여러 개를 묶어서 실행 파일을 생성하는 도구
오류처리 함수
1. perror()
2. strerror()
동적 메모리 할당
- 메모리 할당 malloc()
: 인자로 지정한 크기의 메모리 할당 - 메모리할당과 초기화 calloc()
: 지정한 크기만큼 메모리를 할당하고 0으로 초기화 - 메모리 추가 할당 realloc()
: 이미 할당받은 메모리에 사이즈 크기의 메로리를 추가로 할당 - 메모리 해제 free()
: 사용을 마친 메모리 반납
명령행 인자
1. 명령행 : 사용자가 명령을 입력하는 행
- int main(int argc, char *argv[]);
- 명령행 인자 : 명령을 입력할 때 함께 지정한 인자(옵션, 옵션인자, 명령인자 등)
- 명령행 인자의 전달 : 메인 함수로 자동 전달
2. 옵션 처리 함수 : getopt( )
- int getopt(int argc, char * const argv[], const char *optstring);
- optstring : 사용할 수 있는 옵션 문자, 옵션에 인자가 있을 경우 문자 뒤에 ':' 추가
- extern char *optarg;
- optarg : 옵션의 인자 저장
- extern int optind, opterr, optopt;
- 순서대로, 다음에 처리할 argv의 주소, 오류 메시지를 출력하지 않으려면 0으로 지정, 오류를 발생시킨 문자
'Computer Science > 유닉스프로그래밍' 카테고리의 다른 글
[유닉스 이론과 실습] ch13. 배시쉘 프로그래밍 (0) | 2020.10.18 |
---|---|
[유닉스 이론과 실습] ch04. vi 사용법 익히기 (0) | 2020.10.18 |
Introduction UNIX (0) | 2020.10.18 |
[유닉스 시스템 프로그래밍] Ch02. 파일 입출력 (0) | 2020.09.27 |
[유닉스 이론과 실습] ch05. 배시쉘 활용하기 (0) | 2020.09.23 |