※ 해당 글은 개인 공부 기록을 남겨놓는 것이 목적임으로 오류가 발생할수 있습니다.
오류 또는 업데이트된 사항이 있다면 댓글로 알려주시면 감사하겠습니다.
시스템 콜 :
운영체제에서 커널 모드와 유저 모드로 나뉜다. 운영 체제 구성 중 커널은 운영체제의 핵심으로 프로세스, 하드웨어, 등등 컴퓨터 자원을 효율적으로 관리하는 역할을 가진다.
시스템 콜은 어플리케이션 유저 영역에서 커널 영역의 기능을 사용하고자 할 때 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 |