chapter01 유닉스 시스템 프로그래밍 개요
유닉스 시스템 프로그래밍?
-유닉스에서 제공하는 프로그래밍 인터페이스(시스템 콜, 시스템 함수)를 이용해서 프로그램을 작성하는 것을 의미한다.
유닉스?
-켄톰슨과 데니스 리치가 개발한 운영체제
-버전3에서 C언어를 이용하여 다시 만들어서 고급언어로 작성된 최초의 운영체제
-파일 시스템의 접근, 사용자와 시스템의 정보, 네트워킹 등 다양한 서비스 제공
시스템 호출이란?
-유닉스에서 제공하는 서비스를 이용하여 프로그램을 구현 할 수 있게 제공되는 프로그래밍 인터페이스를 의미
-기본적인 형태는 C언어 함수와 같다.
-시스템 호출의 대부분의 리턴값은 시스템 호출 성공 or 실패를 알려주는 정수값 리턴
ANSI C표준
-ANSI(미국 표준 협회)가 표준화한 C언어이며 이는 ISO 국제표준기구가 국제 표준으로 인정
POSIX
-유닉스에 기반을 둔 표준 운영체제 인터페이스
-서로 다른 유닉스 시스템 사이에서 서로 이식이 가능한 응용 프로그램 개발을 위하여 정한 표준
버전1 ,2 , 3등등 존재하며 새로운 버전을 만들면 옛날 기능은 버벅거린다.
X/OPEN 가이드
-유럽에서 설립된 단체
-개방 시스템의 표준 정의 및 보급을 목적으로 함
단일 유닉스 규격
-OS가 유닉스라는 이름을 사용하기 위해서 지켜야하는 표준
라이브러리
-미리 컴파일된 함수들을 묶어서 제공하는 형태의 특수한 파일
-운영체제의 기능을 제공
라이브러리 함수
-라이브러리에 있는 함수
-개발을 쉽게 하며 컴파일의 속도를 빠르게 한다.
-lib.a 정적라이브러리: 컴파일 시에 같이 적재->실행파일이 무거워진다.
-lib.so 공유 라이브러리: 실행파일의 무게에 영향을 안준다. 해당 파일 실행시에 메모리에 라이브러리 적재된다. 또 한 다른 실행 파일에서도 공유 가능
시스템호출과 라이브러리 함수 다른점은?
-시스템호출은 커널을 직접 호출하지만 라이브러리 함수는 그렇지 않다.
유닉스는 사용자를 위해서 유닉스가 제공하는 명명,함수 등 다양한 서비스에 대한 맨 페이지를 제공한다. 이를 man명령어를 이용해서 사용할 수 있다.
맨페이지 섹션1은 일반적인 명령에 관한것, 섹션2는 시스템호출, 섹션3은 라이브러리 함수

라이브러리 함수는 오류 발생시 NULL리턴(리턴값이 정수형이면 -1 반환)
폴더: 옛날에 컴퓨터가 비쌌을때 캐비넷에 자기 징정쓰는 것 처럼 windows,unix(dir=folder)으로 사용
유닉스 기본 명령
-telnet:유닉스 시스템에 접속
-SSH:접속시 telnet보다 보안성 강화를 시킨것
-logout:접속 해제
-exit:접속 해제
-pwd:현재 디렉토리 경로 출력
-ls:디렉토리 내용 출력
-cd:디렉토리 변경
-cp:파일/디렉토리 복사
-mv:파일/디렉토리 이름 변경 및 이동
-rm:파일/디렉토리 삭제
-mkdir:디렉토리 생성
-rmdir:디렉토리가 비어있을때 그 디렉토리 삭제
-cat:파일 내용출력
-more:파일 내용을 페이지 단위로 출력
-chmod:파일 접근 권한 변경
-grep:패턴 검색
-ps:현재 실행중인 프로세스의 정보 출력
-kill:프로세스 강제 종료
-su:사용자 계정 변경
-tar:파일/디렉토리 묶기
-whereis:파일 위치 검색
-which:파일 위치 검색
vi편집기 내부 명령
-기본 문서 편집기이며 vi로 문저 편집하려면 vi test.c처럼 파일명을 지정해서 실행
-FTP로 해도 된다.
-vi편집기로 작성한 프로그램은 컴파일을 거쳐야한다.
Makefile
-유닉스에서 여러 소스파일을 컴파일하는 방법, 컴파일 명령,링크 파일들, 실행파일명 등을 설정하는 파일이다.



오류 발생시 시스템호출은 -1 , 라이브러리 함수는 오류 발생시 NULL리턴(리턴값이 정수형이면 -1 반환)이다.
errno사용시 오류의 종류를 알려주는 코드값을 알 수 있으나 정확히 파악하기 어려우니 이를 메세지로 변환해주는 perror, str-error를 쓰면 더 좋다.
perror: errno에 저장된 상수를 읽어서 이에 해당되는 오류 메시지를 출력


strerror: 안시 씨에서 정의한 함수



동적 메모리 할당
-malloc:지정한 크기만큼 메모리 할당하며 메모리 크기는 바이트 단위이다. 할당 메모리는 초기화x
-calloc:지정 크기만큼 메모리 할당. 할당된 메모리를 0으로 초기화.
-realloc:메모리 추가 할당. void realloc(할당받은 메모리를 가르키는 포인터, 할당할 메모리 크기)
-free:메모리 해제
명령행
-사용자가 명령을 입력하는 행(프롬프트가 뜨고 커서가 깜박거리는 행)
명령행 인자
-명령행에서 명령을 실행할때 해당명령과 함께 지정하는 인자
ex) ls -l 명령에서의 -l
-메인 함수에서 명령행 인자를 받으려면 int main(int argc , char *argv[])로 정의해야한다.
-int argc는 명령과 인자의 개수, char *argv[]는 명령과 각 인자를 담고 있는 배열


옵션 처리 getopt
-위에서 argc,argv를 일일히 처리하는 작업을 해결하기 위해서 제공되는 함수
-argv에 optstring에 지정된 옵션과 동일한 옵션 문자 존재시 해당 문자를 리턴

