<개인공부>/[Linux\Unix]

[UNIX] 시스템 콜과 라이브러리 함수

BlockDMask 2017. 7. 6. 16:47

1. 유닉스 시스템 프로그래밍 (Unix System Programming)

  • 유닉스에서 제공하는 시스템 호출(system call)을 이용해서 프로그램을 작성하는것.      

**시스템 호출 : 유닉스 시스템이 제공하는 서비스를 프로그램에서 이용할 수 있도록 지원하는 프로그래밍 인터페이스를 의미.

 


2. 시스템 호출(system call) vs 라이브러리 함수(library function)

  • 시스템 호출(system call)
     - 프로그래밍 인터페이스로 기본적인 형태는 C언어 함수와 같다.
     - 커널의 해당 모듈을 직접 호출, 작업, 결과를 리턴함.
     - 성공적으로 수행시 0, 실패시 -1 리턴 
     - 함수 이름 뒤에 (2) 로 표기

  • 라이브러리 함수(Library function)
     - 미리 컴파일된 함수들을 묶어서 제공 (자주 사용되는 함수들 컴파일을 좀 더 빠르게 하기 위해)
     - 라이브러리 함수에서 커널의 서비스를 이용할 경우 함수 내부에서 시스템 호출 사용함.
     - 오류시 NULL 리턴 (int형태 -1리턴)
     - 함수 이름 뒤에 (3) 로 표기

**unix에서 man명령어로 함수의 이름을 치면 함수의 설명과 system call인지 library function인지 나옵니다.

ex) man fopen


예시) 같은 기능? ("파일을 다루기 위해 쓰는 것"이라는 부분에서는 거의 같음.) 파일 입출력의 경우를 살펴보겠습니다.

- open, close 는 시스템 콜입니다.

- fopen, fclose 는 라이브러리 함수입니다.


시스템 콜인 open 같은 경우에는 파일 디스크립터(file descriptor)를 사용(리턴)하고, 

라이브러리 함수 fopen 에서는 파일 포인터(file pointer)를 사용(리턴) 합니다.