UNIX 10주차

2022. 5. 10. 12:25학교수업

UNIX 파일 - 모든 데이터를 연속된 바이트 형태로 저장

 

C파일 종류

1) 텍스트 파일 (text)

- 읽을 수 있는 문자를저장

- 텍스트 파일에서 한 줄의 끝을 나타내는 새줄 문자가 읽혀질 때 C 내부 방식에 의거 변환

2) 이진 파일 (binary)

- 모든 데이터는 있는 그대로 바이트의 연속으로 저장 

- ex) 실행 파일, 이미지

 

저수준 파일 입출력 

- 파일 지시자 int fd;

특징 : 빠름, 바이트 단위로 읽고 쓴다, 특수 파일에 접근 가능, 추가 작업 필요

예시 함수 : open, close, read, write, dup, fcntl, lseek,..... 등

 

고수준 파일 입출력(C 표준 입출력 라이브러리)

- 파일 지시자 FILE* fd;

특징 : 사용이 편하다, 버퍼 단위로 읽고 쓴다, 다양한 형식 기반 입출력 지원, 데이터 입출력 동기화 가능, C언어의 표준 함수로 제공

예시 함수 : fopen, fclose, fread, fwrite, fputs, fgets, fprintf, ....등등

 

파일 열기

- 파일 사용을 위해 사용해야한다.

- 파일 열기하면 FILE 구조체에 대한 포인터 반환

-> fopen()함수 사용 -> FILE 포인터(FILE*) 반환

- FILE 포인터는 열린 파일을 나타낸다.

 

표준 I/O 스트림

- 프로그램이 시작되면 자동으로 open되는 스트링

 

표준 입출력 포인터 stdin, stdout, stderr

표준 입출력 함수 vs 파일 입출력함수

보통 f를 붙여서 구분한다.

ex) getchar() -> fgetc() / scanf() -> fscanf()

 

기타 파일 관련 함수

1. feof -> 파일 포인터 fp가 EOF를 탐지하면 0이 아닌값 반환, 그렇지 않다면 0 반환

2. ungetc -> c에 저장된 문자를 입력 스트림에 반납, 문자를 읽지 않은 것처럼 파일 위치 포인터 1감소

3. fflush -> 아직 파일 fp에 기록되지 않고 버퍼에 남은 데이터를 fp가 가리키는 출력 파일로 내보냄

=> 버퍼 비우기 가능

 

블록 입출력 : 어떤 자료형의 데이터이든 그 데이터를 연속된 바이트로 해석하여 파일에 저장

-> 파일 저장된 데이터를 연속된 바이트 형태로 읽어 원래 변수에 순서대로 저장하여 원 데이터 복원

 

순차 접근 : 지금까지 입출력 함수는 모두 파일의 처음부터 시작하여 차례로 읽음

-> 파일 끝 만나면 동작 멈춤

-> 단점 : 파일이 크고, 작업 위치가 임의의 지점에 위치한 경우 불편

임의 접근 : 파일내 위치에 관계없이 원하는 지점으로 곧바로 이동

-> fseek함수로 원하는 지점이동

-> 이진 파일로 열어야한다.

 

파일 위치 관련 함수

fseek -> 파일 위치 포인터를 임의로 설정할 수 있는 함수 lseek와 비슷

rewind -> 현재파일 위치를 파일 처음으로 재위치

ftell -> 파일내 현재 파일 위치를 나타내는 파일 위치포인터 값 반환

 

C 라이브러리 버퍼 : 파일 입출력시 디스크 I/O수행 횟수를 최소화

- 최적의 크기 단위로 I/O수행

-> 입출력시 매번 기억장치에 엑세스하면 속도면에서나 효율성이 떨어진다.

=> 버퍼에 미리 저장해놓고 꺼내 쓴다.(속도 증가, 효율 증가)

 

C 라이브러리 버퍼 방식

1. 완전 버퍼 방식 : 버퍼크기 = 디스크 블록 크기(버퍼가 꽉 찼을 때 디스크 I/O수행

2. 줄 버퍼 방식 : 새줄 문자 들어올 때 디스크 I/O 수행

3. 버퍼 미사용 방식 : 버퍼 사용 X (시급한 출력의 경우)

 

setvbuf함수 mode

1) 완전 버퍼 : _IOFBF

2) 줄 버퍼 : _IOLBF

3) 버퍼 미사용 :  _IONBF

'학교수업' 카테고리의 다른 글

컴퓨터그래픽스기초 9주차  (0) 2022.05.11
인공지능개론 9주차  (0) 2022.05.10
UNIX 9주차  (0) 2022.05.10
게임공학개론 10주차  (0) 2022.05.09
컴퓨터 그래픽스 8주차  (0) 2022.05.04