Fundamental of Software Develop/: : Linux System Programming

시스템 호출의 오류 처리하기

Jay.P Morgan 2023. 11. 9. 23:38

  시스템 프로그래밍이란?

  시스템에서 제공하는 시스템 호출(시스템 함수, System Call)을 사용해 프로그램을 작성하는 것

 

  응용 프로그램을 작성할 때엔 많은 경우에 쉽게 사용 가능한 상위레벨 함수로 프로그래밍하여, 시스템 콜 서비스를 직접 사용하지 않는다.

 

 

  시스템 호출

  프로그래밍 인터페이스이며, 기본 형식은 C언어의 함수와 같다.

리턴값 = 시스템 호출명(인자, ...);

 

 

  라이브러리 함수

  미리 컴파일된 함수를 묶어서 제공하는 특수한 형태의 파일이다. C언어는 데이터 입출력, 수학 공식, 문자열 처리 등 응용 프로그램 개발에 필요한 함수를 유형별로 분류해 라이브러리로 제공한다.

 

  리눅스 시스템에서 보통 라이브러리는 /usr/lib 에 위치한다.

  라이브러리의 이름은 대개 'lib'로 시작하고, 확장자는 .a(정적 라이브러리, static library)나 .so(공유 라이브러리, shared library)이다. 

 

  정적 라이브러리는 컴파일 시 프로그램에 같이 적재되어 실행파일을 구성하며, 그만큼 크기가 더 커진다.

  한편, 공유 라이브러리는 실행파일에 포함되지 않으며, 실행 시에 해당 라이브러리가 메모리에 적재된다.

  그래서, 메모리를 효율적으로 사용하기 위해선 공유 라이브러리를 많이 사양한다.

 

 

  man 명령

  리눅스 시스템에서는 명령이나 함수 등 시스템의 다양한 서비스에 대한 매뉴얼을 제공한다. 

시스템 호출의 오류 코드 또한 man 페이지에서 참고할 수 있다.

 

  오류 처리하기

  시스템 호출이 성공적으로 수행되면 0을 리턴한다.

  실패하면 -1을 리턴하고, 전역 변수 errno에 에러 코드를 저장한다. 

 

access() 함수로 acc.txt 파일이 존재하는지 확인하는 코드, errno=2

 

 

man access 명령으로 access() 함수에서 발생하는 오류 코드와 해당 설명을 확인할 수 있다.