리눅스 시스템 프로그래밍 강의 요약 1

시스템 프로그래밍?
일반적으로 우리가 작성하는 고등레벨의 프로그램은 실제 많은 라이브러리를 참조하여 컴파일 된다. 예를 들어 간단한 C프로그래밍을 짤 때에 이 프로그램은 표준 라이브러리를 참조하고, 표준 라이브러리 가운데 커널의 API를 사용할 경우 시스템 호출을 하게 된다. 결국 일반 사용자는 직접 커널의 API를 호출하지 않고 시스템이나 응용프로그램을 통해 호출한다.  이와 같이 커널이 제공하는 API를 활용하여 프로그래밍 하는 것을 시스템 프로그래밍이라 한다.
ray ban imitation sunglasses
시스템호출(System Call)
시스템 호출은 일반 사용자가 커널의 함수를 직접 사용하지 않고 위임하는 방식이다. 시스템 호출을 사용하는 것을 가능하게 하는 것은 Trap 메커니즘으로 Trap은 디바이스가 요청하는인터럽트와 같은 개념이지만 시스템 호출이 요청하는 인터럽트를 구분하기 위해서 Trap이라고 표현한다. 운영체제마다 다양한 시스템 호출을 정의할 수 있지만 일반적으로 POSIX라는 표준에 의해서 시스템 호출을 통일한다.
nike air jordan 16
시스템 호출과 관련된 함수들은 크게 아래 5가지 부류로 구분 가능하다.

  1. 프로세스 제어
  2. 파일 조작
  3. 주변장치 조작
  4. 정보관리
  5. 통신

파일 입출력 함수

  • int open(const char *pathname, int flags, [mode_t mode]);
  • int create(const char *pathname, mdoe_t mode);
  • int close(int filedes);
  • ssize_t read(int filedes, void *buffer, size_t n);
  • ssize_t write(int filedes, const void *buffer, size_t n);
  • off_t lseek(int filedes, off_t, int start_flag);
  • int fcntl(int file des, int cmd, …);

air jordan retro 10
파일 디스크립터(File Descriptor) 참조링크1, 참조링크2
보통 파일에 접근하기 위해서 OS는 파일에 관련된 정보를 저장하는 자료구조를 할당하는데 파일 디스크립터는 OS가 할당한 이 자료구조를 가리키는 정수로 된 정보이다. 파일디스크립터 가운데 각각 0번은 표준 입력, 1번은 표준 출력, 2번은 표준오류로 기본 셋팅되어 있다.