- 파일 입출력은 low-level IO와 high-level IO가 있다.
Low-Level File IO (System Call)
(1) System call을 이용해서 파일 입출력
(2) File descriptor 사용
(3) Byte 단위로 디스크에 입출력
(4) 특수파일에 대한 입출력 가능
High-Level File IO (Buffered IO)
(1) C standard library를 사용하여 파일 입출력
(2) File pointer 사용
(3) 버퍼(block) 단위로 디스크에 입출력
(4) 여러 형식의 입출력 지원
- 파일을 오픈할 때 사용하는 매소드는 open이다.
int open(const char *pathname, int flags [, mode_t mode]);
pathname은 열려는 파일 경로(파일이름 포함),
flags는 파일을 여는 방법 (access mode (ex) r, w 등)),
mode는 file acess permission을 설정한다(mode는 파일을 새로 생성할 때만 무효).
그리고 file descriptor를 리턴한다.
반대로 파일을 닫는 매소드는 close이다.
int close (int fd);
close는 닫으려는 fd를 인자로 받으며 성공하면 0, 에러가 발생하면 -1을 리턴한다.
- file descriptor는 열려있는 파일을 구분하는 정수값이다.
특수 파일 등 대부분의 파일을 지칭 가능하며, 프로세스별로(파일별로) 커널이 관리한다.
이는 파일을 열 때 순차적으로 할당된다. 프로세스당 최대 fd(file descriptor)수는 1024를 디폴트로 하며 변경이 가능하다.
fd는 디폴트로 0번은 stdin(input), 1번은 stdout(output), 2번은 stderr(error)로 설정되어 있으며, 변경은 가능하다.
- flags는 아래와 같으며 OR 비트연산자( | )를 사용하여 여러 플래그를 조합 가능하다.
(OR 비트연산자 | 사용)
ex)
O_WRONLY | O_TRUNC => 파일을 W용으로 열면서 처음부터 작성
O_RDWR | O_APPEND => 파일을 R/W용으로 열면서 파일의 맨 끝에 내용을 추가
- mode도 마찬가지로 OR 비트연산자( | )를 사용하여 여러 파일 권한 설정 값을 사용 가능하며 파일을 만들때 설정 할 수 있다.
- File table이란 열린 파일을 관리하는 표 이다. fd와 마찬가지로 프로세스별로 커널이 관리한다. fd에 해당 하는 각종 정보를 관리하며 access mode, file offset, pointer 등을 가진다.
ref) https://www.youtube.com/watch?v=prcFDhhxHt8&list=PLBrGAFAIyf5pIIFQv_U1dG36L5rylTvbx&index=8
'C' 카테고리의 다른 글
Message Queue [C] (0) | 2023.12.16 |
---|