고수준 파일 입츨력
고수준 파일 입출력은 표준 입출력 라이브러리라고 한다.
저수준과 비교한다면 저수준은 바이트 단위로 입출력을 수행하며 고수준은 문자,행,버퍼,형식 기반 입출력이다.
파일 포인터?
-저수준의 파일 기술자와 비슷한 것
-디스크에서 메모리로 읽어온 파일의 위치에 관한 정보를 담고 있는 포인터
-파일 기술자는 정수형이지만 파일 포인터는 FILE* 형태이다.
-파일 열기 fopen----->FILE *fopen (const char *filename , const char *mode);
-파일 닫기 fclose----->int fclose(FILE *stream);
문자 기반 입출력
-fget(FILE *stream); 파일포인터가 가르키는 문자 1개를 읽어온다.
-getc(FILE *stream); fget과 비슷하나 매크로로 구현되어 있음. 대신에 실행 속도는 빠르고 메모리도 더 잡아먹음
-getchar(void); 표준 입력에서 문자 한 개를 읽어온다
-getw(FILE *stream); 파일에서 워드 단위로 읽어온다.

문자열 기반 입력
-성능이 좋다
-포인터형 변수는 시작주소만 줘서 끝주소가 없다.--> 계속 증가하면 다른 데이터에 접근 가능
-char *gets(char *s); 표준 입력에서 문자열을 읽어들인다. 크기를 지정해주지 않아 메모리의 크기를 알수없어서 s가 가득차도 계속 읽을수 있어서 보안 침해 문제 발생한다.
-char *fgets(char *s , int n , FILE *stream);
문자열 기반 출력
-int puts(const char *s);
int fputs(const char *s, FILE *stream);

버퍼 기반 입출력
-size_t fread(void *ptr 버퍼주소 , size_t size 버퍼크기 , size_t nitems 읽어올 항목 수, FILE *stream파일 포인터);
-위 함수는 항목크기가 size인 데이터를 nitems에서 지정 개수만큼 읽어서 ptr이 가리키는 버퍼에 저장

버퍼 기반 출력 함수
-size_t fwrite(const void *ptr 버퍼주소, size_t size 항목의 크기 , size_t nitems 항목 수, FILE *stream 파일 포인터);
-이 함수는 항목의 크기가 size인 데이터를 nitems에서 지정 수 만큼 포인터에서 읽어서 지정한 파일에 출력

형식 기반 입력
-int scanf(const char *restrict format입력형식);
-int fscanf(FILE *restrict stream파일 포인터 , const char *restrict format입력형식);
형식 기반 출력
-int printf(const char *restrict format, args 출력 변수);
-int fprintf(FILE *restrict stream파일 포인터 , const char *restrict format입력형식, args 출력 변수);
파일 오프셋 이동
-int fseek(FILE *stream파일 포인터, long offset 이동할 오프셋, int whence 오프셋의 기준 위치);
-stream이 가르키는 파일에서 offset에 지정한 크기만큼 오프셋을 이동시킨다.
whence에 사용 가능 값
- SEEK_SET파일의 시작 기준
- SEEK_CUR현재 위치 기준
- SEEK_END파일의 끝 기준
현재 오프셋 구하기
-long ftell(FILE *stream);
-위의 함수는 파일의 시작에서 부터 현재 위치의 오프셋까지의 바이트 수이다.
처음 위치로 오프셋 이동
-void rewind(FILE *stream);
파일의 시작으로 오프셋을 이동시킨다.
오프셋의 저장과 이동
-int fsetpos(FILE *stream, const fpos_t *pos); pos가 가르키는 영역의 값으로 파일 오프셋을 변경
-int fgetpos(FILE *stream, fpos_t *pos); 현재 오프셋을 pos가 가르키는 영역에 저장

'리눅스' 카테고리의 다른 글
| chapter03 파일과 디렉토리 (01,02,03,04) (0) | 2023.03.03 |
|---|---|
| chapter02 파일 입출력(04,05) (0) | 2023.02.15 |
| chapter02 파일 입출력(01,02) (2) | 2023.02.10 |
| chapter01 유닉스 시스템 프로그래밍 개요 (0) | 2023.02.07 |
| 실습환경 설치 (0) | 2023.02.06 |