C

시스템 프로그래밍[C] #1 파일 입출력

PON_Z 2023. 7. 31. 20:30

- 파일 입출력은 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

 

 

728x90

'C' 카테고리의 다른 글

Message Queue [C]  (0) 2023.12.16