본문 바로가기
리눅스/임베디드 리눅스

저수준 OpenAPI

by [Akashic Records] 개발의선지자 2024. 8. 13.

※ 해당 글은 개인 공부 기록을 남겨놓는 것이 목적임으로 오류가 발생할수 있습니다.

    오류 또는 업데이트된 사항이 있다면 댓글로 알려주시면 감사하겠습니다.

 

 

시스템 콜 :

운영체제에서 커널 모드와 유저 모드로 나뉜다. 운영 체제 구성 중  커널은 운영체제의 핵심으로 프로세스, 하드웨어, 등등 컴퓨터 자원을 효율적으로 관리하는 역할을 가진다. 

시스템 콜은 어플리케이션 유저 영역에서 커널 영역의 기능을 사용하고자 할 때 system call을 통해 필요한 기능 수행을 도와주는 인터페이스이다.  시스템 콜을 통해 유저 영역에서 커널의 기능을 사용할 수 있도록 도와준다

 

 

OpenAPI은  로우 레벨 system call을 실행하는 함수 목록들을 지칭한다.

여기서는  open, close, read, write 함수에 대해 포스팅하기로 한다.

 

파일 디스크립터(ile Descriptor , FD)란?

리눅스 / 유닉스 계열 시스템에서 프로세스에서 특정 파일 접근 시 사용하는

추상 값을 나타내고 일반적으로 이 아닌 정수값을 갖는다. 

 

 

1. OPEN : 파일 열기

  • int open(const char *pathname, int flags)
  • int open(const char *pathname, int flags, mode_t mode)

parameter 

- pathname : 파일 경로

- flags : 접근 모드를 포함한 여러가지 플래그

- mode : 파일 생성 시 설정 권한 

 

반환값

- 성공 시 열린 파일 디스크립터(fd) , 실패 시 -1

 

파일 열기 대표 플래그 

플래그 의미
O_RDONLY 읽기 전용
O_WRONLY 쓰기 전용
O_RDWR 읽기 + 쓰기 
O_CREAT 파일이 존재하지 않으면 regular file 생

 

2. CLOSE: 파일 닫기

  • int close(int fd)

parameter 

- fd : 파일 디스크립터 

 

반환값

- 성공 시 0, 실패 시 -1

3. WRITE, PWRITE: 파일에 쓰기(byte stream)

ssize_t  write(int fd, const void *buf, size_t count);

ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset);

 

parameter 

- fd : 파일 디스크립터

- buf : 버퍼 포인터

- count : 저장할 사이즈(바이트 단위)

- offset : 저장할 위치(파일 시작 기준)

 

반환값

- 성공 시 실제로 파일에 저장한 사이즈(바이트 단위) - 단, count보다 작을 수 있음

- 실패 시 -1

4.DPRINTF : 파일에 쓰기(formatted)

int dprintf(int fd, const char *format, ...)

 

parameter 

-  fd : 파일 디스크립터 

-  fotmat : 출력 포멧

- .... : 가변 arguments

 

반환값

- 성공시 쓰여진 바이트값

- 실패시 음수

 

5. READ, PREAD : 파일에 읽기(byte stream)

ssize_t  read(int fd, const void *buf, size_t count);

ssize_t pread(int fd, const void *buf, size_t count, off_t offset);

 

parameter 

- fd : 파일 디스크립터

- buf : 버퍼 포인터

- count : 저장할 사이즈(바이트 단위)

- offset : 저장할 위치(파일 시작 기준)

 

반환값

- 성공 시 실제로 파일에서 읽 사이즈(바이트 단위) - 단, count보다 작을 수 있음

- 실패 시 -1

 

5. FDOPEN : 파일 디스크럽터 -> 파일 포인터 변환

FILE * fdopen(int fd, const char *mode)

 

parameter 

- fd : 파일 디스크립터

- mode : 권한

 

반환값

- 성공 시 파일 포인터(stream)

- 실패 시 NULL

 

6. FILENO : 파일 포인터 -> 파일 디스크립터 변환

FILE * fileno(FILE *stream)

 

parameter 

- stream : 파일 포인터

 

반환값

- 성공 시 파일 디스크립터(fd)

- 실패 시 -1

'리눅스 > 임베디드 리눅스' 카테고리의 다른 글

echo 리다이렉트 정의 및 사용법  (0) 2024.11.13
pthread API  (0) 2024.10.25
리눅스 디렉토리 구조[1]  (0) 2024.08.19
파일을 이용한 동기화  (0) 2024.08.13