이 영역을 누르면 첫 페이지로 이동
컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

페이지 맨 위로 올라가기

컴퓨터와 수학, 몽상 조금

컴퓨터공학, 딥러닝, 수학 등을 다룹니다.

[7주차] 파일 입출력

  • 2020.04.10 15:30
  • 학부 수업/C프로그래밍
반응형

파일 입출력

파일의 구분

파일은 저장방식에 따라 텍스트 파일과 이진 파일로 구분됨.

텍스트 파일은 모든 데이터가 문자열로 변환되어 기록되어 특별한 응용 프로그램 없이 내용을 볼 수 있음.

이진 파일은 데이터를 그대로 저장하기 때문에 저장 공간을 적게 차지하고 읽고 쓰기가 빠름

파일 입출력 기본

C 언어 기본 FILE구조체 포인터를 선언하여 파일에 접근할 수 있다.

FILE *f;
f = fopen("input.dat", "r");
fclose(f);

FILE은 파일 입출력에 필요한 정보를 담은 구조체로, 각 파일마다 하나의 FILE 구조체 포인터를 연결하여 사용한다.

표준 스트림

표준 입출력 장치도 논리적으로는 파일로 간주한다. 표준 스트림에 대한 FILE 포인터 명은 아래와 같다.

스트림 이름 스트림명 의미
stdin 표준 입력 스트림 키보드로부터 입력 받음
stdout 표준 출력 스트림 모니터로 결과 출력
stderr 표준 오류 출력 스트림 모니터로 오류 메시지 출력

파일 입출력 절차

fopen() 함수

FILE *fopen(char* filename, char* filemode);

연결할 파일의 이름과 파일 접근 방식을 입력받고, 파일 접근에 성공시 파일 포인터, 실패시 NULL 반환

filemode

파일의 용도에 따라 적합하게 지정해야 함

텍스트 모드 이진 모드 기능 설명
r rb 읽기 파일을 열 수 없으면 NULL
w wb 쓰기 파일이 존재하면 이를 삭제하고 새로 생성
a ab 추가 파일이 없는 경우 w와 같고, 존재하면 기존 파일의 마지막 부분에 내용 추가

+기호를 붙이면 수정 모드

파일 입출력 함수

텍스트 파일

처리 단위 파일 출력 파일 입력
문자 fgetc() fputc()
문자열 fgets() fputs()
지정 형식 fscanf() fprint()

이진 파일

블록 단위로 fread(), fwrite()를 사용

fclose() 함수

현재 열린 파일과 FILE 포인터 연결을 해제함. 성공시 0, 실패시 EOFEnd Of File 반환

eof는 feof함수로 검사할 수 있다.

이진 파일의 입출력

이진 데이터의 특정 구간에 바로 접근하는 임의 접근이 가능

fread()

이진 파일에서 블록의 크기 * 블록 개수 만큼의 데이터를 읽음.

unsigned int fread(void *buf, unsigned int size, unsigned int count FILE *fp);

fp에서 size*count 만큼의 이진 데이터를 읽고 buf에 저장한다.

fwrite()

unsigned int fwrite(const void *buf, unsigned int size, unsigned int count, FILE *fp);

buf의 데이터를 size*count 만큼 fp에 출력.

파일의 임의 접근 처리 방식

파일 위치 지시자를 조작하여 이진 파일의 임의 위치로 바로 접근 가능

fseek()함수

파일 위치 지시자를 지정한 위치로 이동시킴

int fseek(FILE *fp, long int offset, int origin);

origin으로부터 offset만큼 이동함. 음수를 통해 역방향 이동도 가능.

origin 은 아래 상수로 지정함.

이름 위치
SEEK_SET(0) 파일의 맨 처음 위치
SEEK_CUR(1) 파일에서의 현재 위치
SEEK_END(2) 파일의 맨 끝 위치

성공 시 0을 반환함.

ftell()함수

현재 파일 위치 지시자가 가리키는 곳의 위치를 반환하는 함수로, 혀재 위치가 파일 시작 위치로부터 몇 바이트 떨어져 있는지를 알려줌. 오류 시 음수값 반환

long ftell (FILE *fp);

rewind()함수

파일 위치 지시자를 파일의 시작 지점으로 이동시키는 함수.

반응형

'학부 수업 > C프로그래밍' 카테고리의 다른 글

[8주차] 전처리기와 분할 컴파일  (0) 2020.04.10
[6주차] 연산자 함수, 자료형 심화  (0) 2020.04.10
[5주차] 동적 할당  (0) 2020.04.10
[4주차] 구조체  (0) 2020.04.10
[3주차] 문자열  (0) 2020.04.10

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [8주차] 전처리기와 분할 컴파일

    [8주차] 전처리기와 분할 컴파일

    2020.04.10
  • [6주차] 연산자 함수, 자료형 심화

    [6주차] 연산자 함수, 자료형 심화

    2020.04.10
  • [5주차] 동적 할당

    [5주차] 동적 할당

    2020.04.10
  • [4주차] 구조체

    [4주차] 구조체

    2020.04.10
다른 글 더 둘러보기

정보

컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

  • 컴퓨터와 수학, 몽상 조금의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (276)
    • Tech Trend (3)
    • Deep Learning (77)
      • 공부 노트 (21)
      • 논문 리뷰 (44)
      • 논문 스키밍 (1)
      • 영상처리 (11)
    • Engineering (3)
      • Tips (2)
      • Experiences (1)
    • Blog (42)
      • 회고 & 계획 (16)
      • 내 이야기 (8)
      • 리뷰 (3)
      • 군대에 간 공돌이 (9)
      • ML엔지니어 취업 도전기 (1)
      • 여행 (4)
    • 학부 수업 (141)
      • 머신러닝 (16)
      • C프로그래밍 (8)
      • 자료구조 (11)
      • 알고리즘 (17)
      • 디지털시스템 (25)
      • 컴퓨터구조 (11)
      • 확률과 통계 (21)
      • 선형대수학 (14)
      • 이산수학 (18)
      • 데이터시각화 (0)
    • 강의 (9)
      • 딥러닝 기초 (7)
      • Python (2)

공지사항

인기 글

정보

백지오의 컴퓨터와 수학, 몽상 조금

컴퓨터와 수학, 몽상 조금

백지오

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
반응형

나의 외부 링크

  • profile
  • github
  • linkedin

방문자

  • 전체 방문자
  • 오늘
  • 어제
Powered by Tistory / Kakao. © 백지오. Designed by Fraccino.

티스토리툴바