C & C++

파일 입출력

H0CHI 2024. 3. 25. 13:13

fopen

#include <stdio.h>

FILE* fopen(const char* filename, const char* mode);
  • 파일을 가리키는 FILE 객체를 포인터 형태로 반환
  • mode를 통해 입출력 할 작업을 결정

인자

  • filename : 파일의 이름
  • mode : 파일 접근 모드
    • "r" : 읽기 형식으로 파일이 반드시 존재해야 함
    • "w" : 쓰기 형식으로 파일이 존재하면 내용을 지우고, 파일이 존재하지 않으면 빈 파일 생성
    • "a" : 덧붙이기(append) 형식으로 파일이 존재하지 않으면 새로 생성
    • "r+" : 읽기 및 쓰기 형식으로 파일이 반드시 존재해야 함
    • "w+" : 읽기 및 쓰기 형식으로 파일이 존재하면 내용을 지우고, 파일이 존재하지 않으면 빈 파일 생성
    • "a+" : 읽기 및 덧붙이기(append) 형식으로 파일이 존재하지 않으면 새로 생성
    • "-b" : mode 끝에 b를 붙이면 이진 형식으로 open

반환값

  • 성공적으로 open한 경우 FILE 객체에 대한 포인터
  • open에 실패한 경우 NULL

fclose

#include <stdio.h>

int flocse(FILE* stream);
  • open한 파일을 close
  • 해당 스트림의 모든 버퍼를 flush
  • 함수의 호출이 실패하더라도 인자로 전달된 스트림과 이에 해당하는 파일의 관계는 끊어짐

인자

  • stream : 파일을 닫을 스트림의 FILE 객체를 가리키는 포인터

반환값

  • 스트림이 성공적으로 닫히면 0
  • 실패한 경우 EOF

fseek

#include <stdio.h>

int fseek(FILE* stream, long int offset, int origin);
  • 스트림 위치 지정자의 위치를 조정
  • origin 의 위치부터 offset 을 더한 만큼 위치 지정자를 설정

인자

  • stream : 작업을 수행할 스트림의 FILE 객체를 가리키는 포인터
  • offset : origin으로 부터 얼마나 떨어진 곳에 설정할 지에 대한 값
  • origin : offest에 대해지는 위치로 다음과 같은 매크로 상수 사용
    • SEEK_SET : 파일의 시작
    • SEEK_CUR : 현재 파일 포인터의 위치
    • SEEK_END : 파일의 끝

반한값

  • 성공하면 0
  • 실패하면 0이 아닌 값

fread

#include <stdio.h>

size_t fread(void* ptr, size_t size, size_t count, FILE* stream);
  • 스틤에서 데이터 블록을 읽어옴
  • 스트림에서 count 개의 원소를 가지는 배열을 읽어옴
  • 각 원소의 크기는 size 바이트 이고, ptr 이 가리키는 배열에 넣음

인자

  • ptr : count의 크기를 가지는 배열을 가리키는 포인터
  • size : 읽어들을 원소의 크기를 바이트 단위로 전달
  • count : 읽어들일 원소들의 개수로 각 원소의 크기는 size 바이트
  • stream : 데이터를 입력받을 스트림의 FILE 객체를 가리키는 포인터

반환값

  • 성공적으로 읽은 경우, 읽은 원소의 개수가 size_t 형식으로 반환
  • 읽어들인 개수가 count 인자에서 지정한 것과 다르거나, End OF File에 도달한 경우 오류 발생

fwrite

#include <stdio.h>

size_t fwrite(const void* ptr, size_t size, size_t count, FILE* stream);
  • 스트림에 데이터 블록을 씀
  • count 개의 원소를 가지는 배열을 쓰고, 각각의 원소는 size 바이트이고, 그 배열은 ptr 이 가리키는 것
  • 전체 스트림에 써지는 바이트 수는 count

인자

  • ptr : 스트림에 쓰여질 배열을 가리키는 포인터
  • size : 배열 각각의 원소의 크기
  • count : 배열 원소의 개수로 각 원소의 크기는 size 바이트
  • stream : 내용을 쓸 스트림을 가리키는 FILE 포인터

반환값

  • 스트림에 성공적으로 써진 전체 원소의 개수는 size_t 형식으로 반환
  • 쓰여진 바이트 수와 count의 값이 다르면 오류 발생

fgetc

#include <stdio.h>

int fetc(FILE* stream);
  • 지정된 스트림으로부터 하나의 문자를 읽어옴
  • 읽기를 성공하면 읽은 문자를 반환하고, 파일의 끝에 도달하면 EOF 반환

fputc

#include <stdio.h>

int fputc(int c, FILE* stream);
  • 지정된 스트림에 문자 하나를 출력
  • 저장에 성공하면 저장한 문자를 반환하고, 실패하면 EOF 반환

fgets

#include <stdio.h>

char* fgets(char* restict s, int n, FILE* restrict stream);
  • 지정된 스트림으로부터 문자열을 읽어 오는 함수

인자

  • s : 읽은 문자열이 저장될 주소
  • n : 최대 입력 문자 개수
  • stream : 문자열이 저장될 스트림

반환값

  • 읽기를 성공하면 읽은 문자열이 저장된 주수를 반환
  • 파일에 끝에 도달하거나 읽기에 실패하면 NULL 반환

fputs

#include <stdio.h>

int fputs(const char* restrict s, FILE* restrict stream);
  • 지정된 스트림에 문자열을 출력

인자

  • s : 쓰고자 하는 문자열의 주소
  • stream : 문자열을 읽을 스트림

반환값

  • 저장에 성공하면 음수가 아닌 값 반환
  • 저장에 실패하면 EOF 반환

fscanf

#include <stdio.h>

int fsacnf(FILE* restrict stream, const char* restrict format, ...);
  • 지정된 스트림으로부터 다양한 서식 변환 문자를 이용해 문자열을 읽음

fprintf

#include <stdio.h>

int fprintf(FILE* restrict stream, const char* restrict format, ...);
  • 지정된 스트림에 다양한 서식 변환 문자를 이용하여 문자열을 저장